express初探(一)

使用express

  • express 下载,安装与使用,express中间件机制
  • 开发接口,连接数据库,实现登录,日志记录
  • express中间件的原理

安装express

npm install express-generator -g

通过express命令生成项目

express express-test

运行express项目

npm install
npm start

为了方便开发,防止代码重启

npm i nodemon cross-env --save-dev

在项目目录中的package.json文件中,找到配置项scripts,添加:

"dev":"cross-env NODE_ENV=dev nodemon ./bin/www"

app.js文件

  • 各个插件的作用
  • 思考各个插件的实现原理
  • 处理get请求和post请求

express如何处理路由

app.js文件中处理公共部分

// app.js
app.use('/api/blog', blogRouter);

routes/blogRouter中处理

// routes/blogRouter中
var express = require('express');
var router = express.Router();


router.get('/list', function (req, res, next) {
    res.json({
        errno: 0,
        data: [1, 2, 3]
    })
});
router.get('/detail', function (req, res, next){
    res.json({
        errno: 1,
        data: [5, 6, 7]
    })
})

module.exports = router;

访问采用/api/blog/list或者/api/blog/detail

res.json()可以直接返回一个json格式文件,不必再设置请求头

中间件机制

  • 有很多app.use
  • 代码中的next参数是什么

举例

//app.js文件


const express = require('express');

// 本次http请求的实例
const app = express()

app.use((req, res, next) => {
    console.log('请求开始...', req.method, req.url);
    next();
})

app.use((req, res, next) => {
    // 假设在处理cookie
    req.cookie = {
        userId: 'abc123'
    }
    next();
})

app.use((req, res, next) => {
    // 假设处理 post data
    setTimeout(() => {
        req.body = {
            a: 100,
            b: 2
        }
    })
    next();
})

app.get('/api', (req, res, next) => {
    console.log('get /api 路由');
    next();
})

app.post('/api', (req, res, next) => {
    console.log('post /api 路由');
    next();
})
// 模拟登陆验证
// function loginCheck(req, res, next) {
//     console.log('模拟登陆成功');
//     setTimeout(() => {
//         next()
//     })
    
// }
function loginCheck(req, res, next) {
    console.log('模拟登陆失败');
    setTimeout(() => {
        res.json({
            errno: -1,
            msg:'登陆失败'
        })
    })
    
}

app.get('/api/get-cookie', loginCheck,(req, res, next) => {
    console.log('get /api/get-cookie');
    res.json({
        errno: 0,
        data: req.cookie,
    })
})

app.post('/api/get-post-data', (req, res, next) => {
    console.log('post /api/get-post-data')
    console.dir(req.body)
    res.json({
        errno: 0,
        data: req.body
    })
})

app.use((req, res, next) => {
    console.log('处理 404')
    res.json({
        errno: -1,
        msg:'404 not found'
    })
})
app.listen(8000, () => {
    console.log('server is running on port 8000');
    console.log('click on:http://localhost:8000');
})

总结

  • 初始化代码,各个插件的作用
  • express如何处理路由
  • express中间件
posted @ 2020-04-19 00:04  cheeliu  阅读(159)  评论(0)    收藏  举报