安装

1、body-parser -node.js中间件,用于处理JSON,Raw,Text和URL编码的数据
2、cookie-parser -解析Cookie的工具,通过req.cookies可以取到传过来的cookie,并把它们转换成对象
3、multer -node.js中间件,用于处理enctype=’multipart/form-data’的表单数据

路由请求

const fs = require(‘fs’)

const app = express()

app.get(‘/todos’,(req,res) => { fs.readFile(‘./file/db.json’,’utf-8’,(error,data) => { if(error){ return res.status(500).json({ error: error.message }) } const db = JSON.parse(data) // http中一起请求只能对应一个响应 res.status(200).json(db.todos) }) })

// :id类似正则匹配 app.get(‘/todos/:id’,(req,res) => { // 下面获取id参数的方法值得注意 //res.send(get/todos/${req.params.id}) fs.readFile(‘./file/db.json’,’utf-8’,(error,data)=>{ if(error){ return res.status(500).json({ error:error.message }) } const db = JSON.parse(data) db.todos.find(todo => todo.id === Number.parseInt(req.params.id)) if(!todo){ return res.status(404).end() } /*

  1. * 或者通过下面封装后的方式方式
  2. try{
  3. const db =await getDb()
  4. const todo = db.todos.find(todo => todo.id === Number.parseInt(req.params.id))
  5. if(!todo){
  6. return res.status(404).end()
  7. }
  8. res.status(200).json(todo)
  9. }catch(err){
  10. res.status(404).json({
  11. error:err.message
  12. })
  13. }
  14. */

})

app.post(‘/todos’,(req,res) => { res.send(‘post/todos’) })

app.patch(‘/todos’,(req,res) => { res.send(‘patch/todos’) })

app.listen(3000,() => { console.log(服务已经启动,http://localhost:3000); })

  1. **功能封装**<br />上面的代码中存在重复现象,这时我们可以将同样的功能的模块进行封装<br />创建一个db.js封装重复代码
  2. ```javascript
  3. const fs = require('fs')
  4. const { promisify } = require('util')
  5. const path = require('path')
  6. const readFile = promisify(fs.readFile)
  7. const writeFile = promisify(fs.writeFile)
  8. // 获取dbPath的绝对路径
  9. const dbPath = path.join(__dirname,'../file/db.json')
  10. exports.getDb = async () => {
  11. const data = await readFile(dbPath,'utf8')
  12. return JSON.parse(data)
  13. }
  14. -
  15. exports.saveDb = async db => {
  16. const data = JSON.stringify(db,null,' ')
  17. await writeFile(dbPath,data)
  18. }

中间件

1、先看封装

  1. const express = require('express')
  2. const app = express()
  3. const myLogger = (req) =>{
  4. console.log(req.method,req.url,Date.now());
  5. }
  6. app.get('/', (req,res) => {
  7. myLogger(req)
  8. res.send('get/')
  9. })
  10. app.get('/about', (req,res) => {
  11. myLogger(req)
  12. res.send('get/about')
  13. })
  14. app.post('/login', (req,res) => {
  15. myLogger(req)
  16. res.send('post/login')
  17. })
  18. app.patch('/patch', (req,res) => {
  19. myLogger(req)
  20. res.send('get/patch')
  21. })
  22. app.listen(3000,() => {
  23. console.log(`服务已经启动 http://localhost:3000`);
  24. })

2、中间件