wenJonSnow/snowCode

node+express+mysql+mongodb

Opened this issue · 0 comments

nodejs安装

nodejs官网中文,nodejs英文官网

brew -安装nodejs

第一步:打开终端,输入以下命令安装Homebrew (可能要翻墙)

Homebrew

第二步 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模块)

    Package.json 文件Package.json 文件

  • 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 自带模块(跳过)

http://nodejs.cn/api/中文

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

http://expressjs.com

  • 安装 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:   (输入密码默认不显示)
  • 官网下载安装https://dev.mysql.com/downloads/mysql/

  • Mysql 常用命令 (crud)

     # 命令行连接mysql
        mysql -u root -p 回车
        Enter password:   (输入密码默认不显示)
        
     #显示数据库列表  
     mysql>   show databases;     (注意:这里一定要带;分号 作为命令的结束语)
     
     #显示库中的数据表
     		   use mysql;
    		   show tables;
       
  1. 导出数据:
    mysqldump --opt test > mysql.test
    即将数据库test数据库导出到mysql.test文件,后者是一个文本文件
    如:mysqldump -u root -p123456 --databases dbname > mysql.dbname
    就是把数据库dbname导出到文件mysql.dbname中。

  2. 导入数据:
    mysqlimport -u root -p123456 < mysql.dbname。
    不用解释了吧。

  3. 将文本数据导入数据库:
    文本数据的字段数据之间用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 客户端

    https://sequelpro.com/download

  • 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!')
})