node+express+mysql+mongodb
Opened this issue · 0 comments
nodejs安装
nodejs官网中文,nodejs英文官网
brew -安装nodejs
第一步:打开终端,输入以下命令安装Homebrew (可能要翻墙)
- ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
第二步 brew install node
-
brew update
-
brew install node
(注释:brew install homebrew/versions/node5 安装指定版本的nodejs)
查看node终端命令、版本、淘宝镜像、镜像代理管理(nrm)、node版本管理(nvm)
- 查看node 版本: node -v (注释:version)
- 进入node执行环境:node (注释:和python 一样)
- 查看npm 版本:npm -v (注释:npm是跟随nodejs一起安装的包管理工具)https://www.npmjs.com/
- 查看npm 的命令:npm help
- 常用命令 :npm install jquery / npm uninstall jquery
npm i express -g / npm uninstall express -global
npm i express —save / npm i express —save-dev
npm install -g cnpm --registry=https://registry.npm.taobao.org
cnpm install express
-
镜像代理管理(nrm)
npm i nrm -g nrm —version nrm ls nrm use tabo...
-
node版本管理(nvm)
npm i nvm -g nvm —version nvm ls nvm use 8.9.2
创建server.js 文件 启动node 服务器
server.js 文件
console.log('hello world!') //类似 python的 print'hello world!'
-
Mac 下 在终端中找到文件夹的路径 进入nodejs基础文件夹下 输入命令 node server.js
➜ ~ cd Desktop/nodejs基础 回车
➜ nodejs基础 node server.js 回车 (注释:输入 node ser…. 按 tab 键 系统会自动去找server.js 并且补全文件名)
执行server.js 文件下的 js代码
终端输出:hello world!
-
Windows 下 找到nodejs基础文件夹 鼠标右击 点击在终端中打开此命令 进入nodejs基础文件的终端
➜ nodejs基础 node server.js 回车 (注释:输入 node ser…. 按 tab 键 系统会自动去找server.js 并且补全文件名)
执行server.js 文件下的 js代码
终端输出:hello world!
-
在任何路径下都可以启动node 的执行环境
- 根目录下
~ node 回车
1+1 // 2
-
nodejs基础 文件下
nodejs基础 node 回车
-
VsCode 编辑器启动终端方法
按键:shift command m
在切换到终端 (注意终端打开后的路径)
➜ nodejs基础 node server.js 回车 (注释:输入 node ser…. 按 tab 键 系统会自动去找server.js 并且补全文件名)
执行server.js 文件下的 js代码
终端输出:hello world!
-
npm init 初始化 package.json文件
npm init This utility will walk you through creating a package.json file. It only covers the most common items, and tries to guess sensible defaults. See `npm help json` for definitive documentation on these fields and exactly what they do. Use `npm install <pkg> --save` afterwards to install a package and save it as a dependency in the package.json file. Press ^C at any time to quit. name: (node_modules) sd # 模块名 (注意:模块名必须要写) version: (1.0.0) description: Node.js 测试模块(www.runoob.com) # 描述 entry point: (index.js) test command: make test git repository: https://github.com/runoob/runoob.git # Github 地址 keywords: author: license: (ISC) About to write to ……/node_modules/package.json: # 生成地址 { "name": "runoob", "version": "1.0.0", "description": "Node.js 测试模块(www.runoob.com)", …… }
Is this ok? (yes) yes 自动生成package.json 文件 管理程序依赖的所有安装包
-
npm init —yes/-y 一键生成package.json 文件( 我这里报错,并生成npm-debug.log 文件 ;报错原因可能是没有node_modules模块)
-
npm start 默认命令 和node server.js 一样
- 如果新加命令 在执行时 输入 npm run estart 会去执行node server.js
{
"name": "mynode",
"version": "1.0.0",
"description": "",
"main": "server.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"start": "node server.js",
"estart":"node server.js" //新加的命令
},
"author": "",
"license": "ISC"
}
nodejs 自带模块(跳过)
https://nodejs.org/dist/latest-v8.x/docs/api/英文
const fs= require('fs')
fs.readFile('./test.txt',(err,data)=>{
console.log(data)
console.log(data.toString())
})
express nodejs第三方框架 搭建api接口
https://www.npmjs.com/:所有的nodejs 第三方包都是放在这里
https://www.npmjs.com/package/express
https://github.com/expressjs/express
-
安装 express 在nodejs基础文件下
npm i express —save (— save保存在发布环境中,—save-dev 保存在开发环境中)
-
自动 生成 node_modules 文件 保存express 所有的文件,包括依赖文件并。
-
在package.json 文件里面生成 生产环境对象 ,标名的express 模块及版本
"dependencies": { "express": "^4.16.2" }
-
-
导入express 建立服务 开启服务 (注意:nodejs 6.2.x 版本 不支持import 导入模块,只能用require('express')导入)
- 创建第一个服务
const express=require('express') // 只能是require 导入 let app=express();//创建服务app app.get('/',(request,response)=>{ //get 请求 '/' 路由 request: 请求 response: 响应 res.send('get') }) app.post('/',(req,res)=>{ // 需要借用postman 等工具发送post请求 res.send('post') }) app.listen(6688,'10.243.243.36',()=>{ // 特别注意端口 不能 被占用 浏览器打时 地址 ip 不能错 console.log('server is ok!') })
浏览器打开http://10.243.243.36:6688/ 看到 22
-
由于修改server.js文件后每次都要在执行一次node server.js 所以借用node 第三方包nodemon 自动检测更新
npm i nodemon -g (注意:需要全局安装)
-
用nodemon 启动 server.js
nodemon server.js (注意:更改保存后自动重新启动服务)
-
express 发送请求时 如何获取请求的参数
-
get请求 请求参数对象存储在request.query 下
app.get('/index',(req,res)=>{ res.send(req.query) console.log(req.query.name) })
-
post请求 需要借助第三方nodejs 框架:body-parser
- npm install body-parser - -save
const express=require('express') const bodyParser=require('body-parser') let app=express() app.use(bodyParser.urlencoded({ extended: false })) //post请求body-parser插件需要先写这句 //parse application/json app.use(bodyParser.json()) app.post('/demo',(req,res)=>{ console.log(req.body) res.send(req.body.passwd) })
-
multer 中间件 获取 form data 数据 在postman工具中https://www.getpostman.com/
var app = require('express')(); var bodyParser = require('body-parser'); var multer = require('multer'); // v1.0.5 var upload = multer(); // for parsing multipart/form-data app.use(bodyParser.json()); // for parsing application/json app.use(bodyParser.urlencoded({ extended: true })); // for parsing application/x-www-form-urlencoded app.post('/profile', upload.array(), function (req, res, next) { console.log(req.body); res.json(req.body); });
-
-
express 路由的运用
-
http://expressjs.com/en/4x/api.html#router.route
-
新建文件manRouter.js
const express = require('express')// require() 多次导入文件不会影响性能 const manRouter = express.Router() manRouter.get('/xz', (req, res) => { res.send('七匹狼') }) manRouter.post('/px', (req, res) => { res.send('花花公子') }) module.exports = manRouter;
-
Server.js
const manRouter = require('./manRouter'); app.use('/man', manRouter); //这里路由/man在前面 /xz 在后 (http://10.243.243.36:6688/man/xz)
-
-
-
express 权限验证
-
all 和next 的结合使用
var express=require('experss'); var app=express(); app.all('/*',(req,res,next)=>{ //注意不要忘了 * var name =req.query.user; if(name=="laowang"){ console.log('登录成功') next(); } else{ res.send('请先登录!') } }) app.get('/index',(req,res)=>{ res.send('我是老王') }) app.listen(6688,'10.243.242.30',()=>{ console.log('server is ok!'); })
-
mysql数据库
-
安装mysql
-
brew install mysql
//安装 mysql brew install homebrew/versions/mysql56 //配置文件 cd /usr/local/opt/mysql // 删除配置文件,一会初始化时,会生成一个新的 rm my.cnf //开机自启动 mkdir -p ~/Library/LaunchAgents/ cp /usr/local/opt/mysql56/homebrew.mxcl.mysql56.plist ~/Library/LaunchAgents/ launchctl load -w ~/Library/LaunchAgents/homebrew.mxcl.mysql56.plist //初始化 mysql,设置 root 密码,连接 mysql # 初始化 cd /usr/local/opt/mysql ./bin/mysql_install_db # 设置root密码 ./bin/mysql_secure_installation # 命令行连接mysql mysql -u root -p 回车 Enter password: (输入密码默认不显示)
-
Mysql 常用命令 (crud)
# 命令行连接mysql mysql -u root -p 回车 Enter password: (输入密码默认不显示) #显示数据库列表 mysql> show databases; (注意:这里一定要带;分号 作为命令的结束语) #显示库中的数据表 use mysql; show tables;
-
导出数据:
mysqldump --opt test > mysql.test
即将数据库test数据库导出到mysql.test文件,后者是一个文本文件
如:mysqldump -u root -p123456 --databases dbname > mysql.dbname
就是把数据库dbname导出到文件mysql.dbname中。 -
导入数据:
mysqlimport -u root -p123456 < mysql.dbname。
不用解释了吧。 -
将文本数据导入数据库:
文本数据的字段数据之间用tab键隔开。
use test;
load data local infile "文件名" into table 表名;
1:使用SHOW语句找出在服务器上当前存在什么数据库:
mysql> SHOW DATABASES;
2:创建一个数据库MYSQLDATA
mysql> CREATE DATABASE MYSQLDATA;
3:选择你所创建的数据库
mysql> USE MYSQLDATA; (按回车键出现Database changed 时说明操作成功!)
4:查看现在的数据库中存在什么表
mysql> SHOW TABLES;
5:创建一个数据库表
mysql> CREATE TABLE MYTABLE (name VARCHAR(20), sex CHAR(1));
6:显示表的结构:
mysql> DESCRIBE MYTABLE;
7:往表中加入记录
mysql> insert into MYTABLE values ("hyq","M");
8:用文本方式将数据装入数据库表中(例如D:/mysql.txt)
mysql> LOAD DATA LOCAL INFILE "D:/mysql.txt" INTO TABLE MYTABLE;
9:导入.sql文件命令(例如D:/mysql.sql)
mysql>use database;
mysql>source d:/mysql.sql;
10:删除表
mysql>drop TABLE MYTABLE;
11:清空表
mysql>delete from MYTABLE;
12:更新表中数据
mysql>update MYTABLE set sex="f" where name='hyq';
-
Mysql 客户端
-
sql语句(crud)
/** 创建一个user表 创建表格式: create table if not exists 表名(字段名1 字段1的类型 约束,字段名2 字段2的类型 ,字段名N 字段N的类型); 大小写无所谓 蓝色代表关键字 */ /** create table if not exists t_user(uid int PRIMARY KEY auto_increment,uname varchar(50) not null,uage int DEFAULT 0,usex int DEFAULT 0); **/ /** 删除t_user表 删除表格式: drop table if exists 表名; */ /** drop table if exists t_user; **/ /** 往t_user表中插入数据 新增数据格式: insert into 表名(字段名1,字段名2,字段名N) values(字段1的值,字段2的值,字段N的值); */ /** insert into t_user(uid,uname,uage,usex) values(1,"高潮",18,0); **/ /*** insert into t_user(uname,uage) values("嫩司机",5); **/ /** 修改t_user中的数据 update 表名 set 字段名1 = 字段1的值,字段名2 = 字段2的值, */ /** update t_user set uage = 60,usex = 1 where uname = '老司机'; **/ /** 删除t_user表中的数据 删除语句: delete from 表名 【条件语句】; drop 才是把整个表删除掉 delete 只是删除表中的数据 */ /*** delete from t_user where uage > 10; **/ /** 查询操作 */ /** 查询所有 select * from 表名; / select 字段1,字段2,字段N from 表名; * 代表所有字段 */ /** select * from t_food; **/ /** SELECT food_name,food_price from t_food; **/ /** 条件查询 select * from 表名 条件语句 / select 字段1,字段2,字段N from 表名 条件语句; 查询价格大于200 并且价格小于200 */ /** select food_name,food_price from t_food where food_price > 200 and food_price < 2000; **/ /** 查询价格小于200 或者价格大于等于10000 */ /** select food_name,food_price from t_food where food_price < 200 or food_price >= 10000; **/ /** 模糊查询,关键字搜索 查询名字中带有 "子" where 字段名 like '%关键字%' %代表通配符 */ /** select food_name,food_price from t_food where food_name like '%子%'; **/ /** 查询条数 count */ /** select count(*) from t_food where food_name like '%子%'; **/ /** 查询商品按照价格从高到底进行排序 order by 需要排序的字段 desc/asc desc : 倒序 asc : 正序 */ /*** select * from t_food order by food_price desc; **/ /** 分页 limit 开始的索引,条数 每页5条 第一页 0,5 第二页 5,5 第三页 10,5 第N页 (N-1)*5,5 */ select * from t_food order by food_price desc limit 10,5; /* Select * from t_food where fcount>4 order by fcount asc limit 0 ,5 */
在nodejs 中 使用mysql 数据库
-
借用第三方包操作mysql数据库
npm install orm mysql —save (注意: mysql 也需要装 ,这是他 的依赖项,不然 报错)
const express = require('express') const orm = require('orm') //一定 要 npm install orm mysql /--save const app = express() app.use(orm.express("mysql://root:wenhuizuo@127.0.0.1/newmysql", { define: function (db, models, next) { console.log("连接数据库成功!"); //next一定的调 next(); } })); app.get('/zcpzTeam', (req, res) => { req.db.driver.execQuery('select * from t_zcpz ;',(err,zcpz)=>{ if(err){ console.log(err) return; } res.send({body:{zcpzTeam:zcpz,responseCode:'200',responseMsg: "operate successfully"}}) }) }) app.listen(6699, '10.243.243.36', () => { console.log('server is ok ') })
mongodb 数据库 https://www.mongodb.com/
brew 安装mongodb
Mac下 用 Homebrew 命令 安装 mongodb
先安装 brew
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
卸载brew
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/uninstall)"
更新
brew update
安装mongodb
brew install mongodb
安装成功后必须先 创建mongodb 数据写入目录 在根目录中创建 /data/db mongodb 默认的目录文件
sudo mkdir -p /data/db。 (sudo 一般需要加上。我的不加sudo 不能创建)
然后给刚刚创建的目录以可读可写的权限
sudo chown `id -u` /data/db
启动mongodb 输入以下命令
mongod
再开启新的终端。 (一定要 开新的终端):要先执行mongod成功后执行mongo,出现箭头表示链接成功
mongo
mongodb 常用命令
查询库、查询表
show dbs //查询所有的数据库
show collections //查询当前数据库下的所有数据表
查询所有db数据库的 命令
db.help()
查询在zcpzs数据库下的命令
db.zcpzs.help()
建库和删库
use myDbs //建立一个名为myDbs的数据库,当这个库存在时则是切换到这个数据库中去
use myDbs
db.dropDatabase(); //这两句是删除这个数据库
建表和删表
//表操作都是要先到一个数据库中去,通过use方法
db.myTable.insert({name:’hf’,age:20}); //在mongodb中在插入数据时即创建了改表,此时创建的是名为myTable的数据表
db.myTable.drop(); //删除myTable这个数据表
//如果没有指定数据库,表会创建在mongdb默认数据库test里
单表的增删改
db.myTable.insert({name:’hahaha’,age:12}); //新增
db.myTable.update({name:’hf’},{$set:{age:25}}) //修改
db.myTable.remove({name:’hf'}); //删除
查询
db.myTable.find(); //查询myTable中的所有数据
db.myTable.find().sort({age:1}) //根据age升续
db.myTable.find().count(); //查询
mongodb nodejs 中的使用
借用mongoose第三方包
https://www.npmjs.com/package/mongoose
node.js下 使用mongoodb 借用mongoose第三方包
安装
npm install mongoose —save
var express = require('express');
var app = express();
var mongoose = require('mongoose');
var db = mongoose.connect('mongodb://localhost/zcpzs');
// var Schema = mongoose.Schema;
// ObjectId = Schema.ObjectId;
var zcpzScheMa = new mongoose.Schema({
// author : ObjectId,
name: String,
age: Number
})
var MyModel = db.model('zcpztables', zcpzScheMa); //集合 一定要小写字母
//特别注意:这里的 zcpztables 在数据库中 一定要小写命名 如果这里写成zcpzTables 大写。再去数据库找时 也会默认去找小写的zcpztables
数据库中的集合名称,当我们对其添加数据时如果zcpztables已经存在,则会保存到其目录下,如果未存在,则会创建zcpztables集合,然后在保存数据。
app.get('/', (req, res) => {
MyModel.find({}, (err, data) => { //查询数据 可带条件
if (err) {
console.log(err)
return;
} else {
console.log(data)
res.send(data);
}
})
MyModel.count({}, (err, count) => { //查询数量
if (err) {
console.log(err)
return;
} else {
console.log(count)
}
})
MyModel.update({ name: 'wensnow' }, { $set: { age: '18' } }, (err) => { // 修改数据
if (err) {
console.log(err)
return;
} else {
console.log('update is ok')
}
})
MyModel.remove({ name: 'sss11111s' }, (err) => { // 删除数据
if (err) {
console.log(err)
return;
} else {
console.log(' remove is ok')
}
})
MyModel.create({ name: '22', age: '22' }, (err) => {
if (err) {
console.log(err)
return;
} else {
console.log(' create is ok')
}
// db.close() 不支持 不需要
})
})
app.listen(3000, '10.243.243.36', () => {
console.log('server is ok!')
})