zoukankan      html  css  js  c++  java
  • node(Express+Sequelize)

    官方网址

    一、入门案例

    const os = require('os');
    
    // 获取系统的cpu的信息
    const cpus = os.cpus(); // 获取当前系统的cpu的数量
    console.log(cpus.length);
    
    // 获取内存的信息
    const total = os.totalmem(); // bytes
    console.log(total/1024/1024/1024); // GB
    
    // 剩余内存
    const free = os.freemem();
    console.log(free/1024/1024/1024); // GB
    
    // web服务
    // ajax -> api -> web server(nodejs)
    
    const http = require('http');
    
    const server = http.createServer((req,res)=>{
        res.end('hello');
    });
    
    server.listen(3000,'127.0.0.1',()=>{
        console.log('服务启动成功!');
    });
    

    二、nodemon(热加载)

    开发时,修改代码后,需要频繁重启项目。nodemon配置热加载,解决了重复启动的问题。

    const http = require('http');
    
    const server = http.createServer((req,res)=>{
        res.end('hello');
    });
    
    server.listen(3000,'127.0.0.1',()=>{
        console.log('服务启动成功!');
    });
    
    {
      "name": "admin-api-demo",
      "version": "1.0.0",
      "description": "",
      "main": "app.js",
      "scripts": {
        "start": "node app.js",	# 添加此句 可用 npm start启动项目
        "test": "echo "Error: no test specified" && exit 1"
      },
      "author": "",
      "license": "ISC",
      "dependencies": {  
        "body-parser": "^1.19.0",
        "cookie-parser": "^1.4.5",
        "express": "^4.17.1",
        "multer": "^1.4.2",
        "mysql": "^2.18.1"
      }
    }
    

    1、安装配置

    # -D:安装在开发环境
    npm install nodemon -D
    
    # 修改 package.json 中 "start": "node app.js" 改为
    "start": "nodemon app.js"
    
    # 重启命令(nodemon也可自动重启,因为配置了监听 watching:*.*)
    rs
    

    2、配置nodemon.json

    因为项目中不需要监听全部文件,避免没必要的重启,所以配置nodemon.json。

    指定要监听的目录,只有该目录下的文件被改动,nodemon才会重启项目。

    {
        "watch":["./src/**/*.*"]
    }
    

    三、nrm(管理npm源)

    1、安装

    npm install nrm -g
    

    2、常用命令

    # 列出npm源列表
    nrm ls
    
    # 查看当前使用的源
    nrm current
    
    # 切换源 -- 比如切换到taobao
    nrm use taobao
    
    # 添加自定义源
    nrm add <registry> <url> [home]
    

    四、nvm(管理nodejs版本)

    • Mac/Liunx -- nvm
    • Windows -- nvm-windows

    1、下载nvm-windows

    :如果在安装nvm-windows之前安装过nodejs。

    ​ 安装过程中则会提示"你希望nvm管理已经安装的 node 版本吗?"。

    ​ 选择"是"即可

    2、使用

    # 列出可安装的版本
    nvm list available
    
    # 列出已安装的版本
    nvm list
    
    # 安装指定的版本的nodejs,例如
    nvm install 10.15.0
    
    # 使用指定版本的nodejs,例如
    nvm use 10.15.0
    

    五、Express

    1、初始化项目

    # 创建myapp目录
    mkdir myapp
    
    # 进入myapp目录
    cd myapp
    
    # 生成 package.json 文件
    npm init
    
    # 将入口改为app.js
    

    2、安装express

    npm install express --save
    
    # 以下几个重要模块需要与 express 框架一起安装
    
    # node.js 中间件,用于处理 JSON, Raw, Text 和 URL 编码的数据。
    npm install body-parser --save
    
    # 解析Cookie的工具。通过req.cookies可以取到传过来的cookie,并把它们转成对象。
    npm install cookie-parser --save
    
    # node.js 中间件,用于处理 enctype="multipart/form-data"(设置表单的MIME编码)的表单数据。
    npm install multer --save
    

    3、简单服务

    // 导入express
    const express = require('express');
    // express实例
    var app = express();
    
    // get请求
    app.get('/getName/:age',(req,res)=>{
    
      let {age} = req.params;
      
      res.json({
         name:'张get',
         age
      });
    });
    
    // post请求
    app.post('/getName',(req,res)=>{
        res.send('张post')
    });
    
    app.listen(3000,()=>{
      console.log('服务已经启动。。。');
    });
    

    六、Route(路由)

    // 导入express
    const express = require('express');
    // express实例
    var app = express();
    
    // 1、通过请求的方法类型 get/post/put/delete
    app.get('/demo',(req,res)=>{
        // req:请求对象
        // res:服务器响应对象
        res.json({
            message:'hello get'
        })
    })
    
    app.post('/demo',(req,res)=>{
        res.json({
            message:'hello post'
        })
    })
    
    // 2、通过uri
    app.get('/user/byname',(req,res)=>{
    	let {name} = req.query;
        res.json({
            name
        })
    })
    
    app.get('/user/byid',(req,res)=>{
    	let {id} = req.query;
        res.json({
            id
        })
    })
    
    app.listen(3000,()=>{
      console.log('服务已经启动。。。');
    });
    

    1、app.all

    1.1、场景一

    满足客户端无论使用什么请求方式都可以得到响应

    // 导入express
    const express = require('express');
    // express实例
    var app = express();
    
    app.all('/demo',(req,res)=>{
        res.json({
            message:'hello get'
        })
    })
    
    app.listen(3000,()=>{
      console.log('服务已经启动。。。');
    });
    

    1.2、场景二

    无论客户端使用任何uri都可以响应

    // 导入express
    const express = require('express');
    // express实例
    var app = express();
    
    app.all('*',(req,res)=>{
        res.json({
            message: 'demo',
            method: req.method,
            uri: req.path
        })
    })
    
    app.listen(3000,()=>{
      console.log('服务已经启动。。。');
    });
    

    2、app.use

    以上两个场景也可通过use实现。不过一般use作为中间件使用。

    3、路由拆分

    // member.router.js
    // 导入express
    const express = require('express');
    // 创建路由
    const router = express.Router();
    
    router.get('/list',(req,res)=>{
        res.json({
            list:[
                id:001,
                name:'李四'
            ]
        })
    })
    
    module.exports = router;
    
    // sku.router.js
    // 导入express
    const express = require('express');
    // 创建路由
    const router = express.Router();
    
    router.get('/list',(req,res)=>{
        res.json({
            list:[
                name:'鞋子'
            ]
        })
    })
    
    module.exports = router;
    
    // 导入express
    const express = require('express');
    // express实例
    var app = express();
    
    // 注册路由
    const memberRouter = require('./member.router');
    const skuRouter = require('./sku.router');
    
    app.use('/member',memberRouter);	// 访问:member/list
    app.use('/sku',skuRouter); // 访问:sku/list
    
    app.listen(3000,()=>{
      console.log('服务已经启动。。。');
    });
    

    七、express中间件

    1、中间件完整结构

    • 是一个函数
    • 2、err,req,res,next -> function
    // 导入express
    const express = require('express');
    // express实例
    var app = express();
    
    // 中间件完整的结构
    // 1、是一个函数
    // 2、err,req,res,next -> function
    
    function demo_middleware(err,req,res,next){
        // 1、异常处理
        // 2、处理业务功能,然后转交控制权 -- next
        // 3、响应请求 -- 结束响应 --> 当作路由的处理函数
    }
    
    function valid_name_middleware(req,res,next){
        let {name} = req.query;
        if(!name || name.length){
            res.json({
                message:'缺少name参数'
            })
        }else{
            next();
        }
    }
    
    // 匹配1
    app.all('*',valid_name_middleware);
    
    // 匹配2
    app.get('/test',(req,res)=>{
        res.json({
            message:'test'
        })
    })
    
    app.listen(3000,()=>{
      console.log('服务已经启动。。。');
    });
    

    2、中间件各级别的使用

    • app (应用)级别的使用

      • 注册的使用,一定在最顶级

      • app.use --> api加载

        // 导入express
        const express = require('express');
        // express实例
        var app = express();
        
        function log_middleware(req,res,next){
            console.log('请求来了。。。');
            next();
        }
        
        // app级别使用
        app.use(log_middleware);
        
        // 加载 static 的中间件(内置)
        // 获取static目录下的静态文件
        app.use(express.static('static',{
            // 如果请求没有后缀,自动加默认后缀
            extensions:['html','htm']
        }))
        
        app.listen(3000,()=>{
          console.log('服务已经启动。。。');
        });
        
    • router 级别

      // user_router
      // 导入express
      const express = require('express');
      // 创建路由
      const router = express.Router();
      
      router.use(function(req,res,next){
          console.log('log from router');
          next();
      })
      
      // 路由内部使用
      router.get('/demo',[/** middleware */],(req,res)=>{
          res.json({
             message:'from route demo'
          })
      })
      
      module.exports = router;
      
      // 导入express
      const express = require('express');
      // 注册路由
      const userRouter = require('./router/user_router');
      // express实例
      var app = express();
      
      // router级别使用
      
      
      app.use('/user',userRouter);
      
      app.listen(3000,()=>{
        console.log('服务已经启动。。。');
      });
      
    • 异常处理

    八、异常处理

    // 导入express
    const express = require('express');
    // express实例
    var app = express();
    
    app.get('/demo',(req,res)=>{
       throw new Error('测试异常');
    });
    
    // 中间件
    function error_handler_middleware(err,req,res,next){
        if(err){
            let {message} = err;
            res.status(500);
            .json({
                message: `${message || '服务器异常'}`
            })
        }
    }
    
    // 404处理
    function not_found_handler(req,res,next){
        res.json({
            message:'api不存在'
        })
    }
    
    app.use(not_found_handler);	// 先判断此异常
    app.use(error_handler_middleware);	// 最后判断此异常
    
    app.listen(3000,()=>{
      console.log('服务已经启动。。。');
    });
    

    九、Sequelize

    1、安装

    # 安装
    npm install sequelize -S
    npm install sequelize-cli -S
    npm install mysql2 -S
    
    npx sequelize-cli init
    

    2、配置

    • 修改config目录下的config.json文件

    3、创建数据模型

    npx sequelize-cli 
    model:generate 
    --name User # 表名称
    --attributes # 属性。字段名:字段类型
    firstName:string,
    lastName:string,
    email:string
    

    4、生成数据库表

    npx sequelize-cli db:migrate --env=<config.json的环境key>
    

    5、js

    // 导入express
    const express = require('express');
    // express实例
    var app = express();
    
    const models = require('../models');
    
    // 插入一条数据
    app.get('/create',async (res,req)=>{
        let {name} = req.query;
        // 返回promise user-->sequelize对象
        let user = await models.User.create({
            name
        })
        console.log(user);
        res.json({
            message:'创建成功',
            user
        })
    })
    
    // 获取列表
    app.get('/list',async (res,req)=>{
        let list = await models.User.findAll();
        res.json({
            list
        })
    })
    
    // 查询一条数据
    app.get('/detail/:id',async (res,req)=>{
        let {id} = req.params;
        let user = await models.User.findOne({
                where:{
                    id
                }
            });
        res.json({
            user
        })
    })
    
    app.listen(3000,()=>{
      console.log('服务已经启动。。。');
    });
    

    本文内容学习自 慕课网 -- Nodejs全栈入门

    课程地址

  • 相关阅读:
    Docker Swarm
    服务器虚拟化
    kubernets的工作流程
    配置docker阿里云加速器
    kubeadm 安装kubernetes集群。
    linux的10个最危险的命令
    18个网络带宽常用命令
    column命令
    dd命令
    scp命令
  • 原文地址:https://www.cnblogs.com/luckyzs/p/13182207.html
Copyright © 2011-2022 走看看