■express

express简介

  • 是什么:基于nodejs开发的一个框架(原理基于node内置http模块封装)
  • 好 处:加快项目开发,便于团队协作

express使用

步骤1:下载

  1. **npm install express yarn add express**

步骤2:使用

  1. 1.创建一个http.js 文件
  2. 2.引入express模块
  3. const express = require('express')
  4. 3.创建app对象,通过express() 多了解一点 ---> 底层原理http模块的createServer
  5. const app = express()
  6. 4.路由,语法 app.http 请求方式(路径,回调函数)
  7. app.get('/',(req,res) =>{
  8. //req对应request res对应response
  9. res.send('hello')
  10. })
  11. 5.启动服务监听端口
  12. app.listen(3000,()=>{
  13. console.log('http://localhost:3000')
  14. })
  15. 6.在终端运行 node http
  16. 7.打开服务器访问 localhost:3000 即可

接口测试:

学生添加接口

步骤1:定义路由 /stu post
步骤2:响应任意json数据
步骤3:定义stu模块,定义创建数据的方法
步骤4:调用stu模型创建数据的方法,返回结果

  1. // //增
  2. // insertObj.save()
  3. // .then(res =>{
  4. // console.log(insertObj)
  5. // console.log(res)
  6. // return res
  7. // })
  8. // .catch(err=>{
  9. // console.log('插入失败' + err)
  10. // return false
  11. // })

学生删除接口

  1. // 删 (这里注意api名字 删除符合条件的第一个文档使用:remove、deleteOne 删除符合条件的所有文档使用:deleteMany )
  2. // model.deleteOne({age:{$gte:18}})
  3. // .then(res=>{
  4. // return res.deleteCount
  5. // })
  6. // .catch(err => {
  7. // console.log('删除失败'+err)
  8. // return false
  9. // })

学生修改接口

  1. // 改 (注意model.update 被弃用 修复警告=> 修改update为updateOne)
  2. // model.updateOne({uname:'张三'},{uname:'ccb'})
  3. // .then(res=>{
  4. // console.log(res)
  5. // console.log(res.nModified)
  6. // return res.nModified
  7. // })
  8. // .catch(err=>{
  9. // console.log('修改失败'+err)
  10. // return false
  11. // })

学生列表接口

步骤1:定义路由 /stu get
步骤2:响应任意json数据
步骤3:修改stu模型,增加查询方法
步骤4:修改控制,调用模型返回数据

  1. // // 查
  2. // model.find({})
  3. // .then(res=>{
  4. // console.log(res)
  5. // //db2.close() 作用未知
  6. // return res
  7. // })
  8. // .catch(err=>{
  9. // console.log('查找失败' + err)
  10. // return false
  11. // })

学生列表接口分页

步骤1:修改控制器接口请求参数 (get) pageno pagesize
步骤2:传递给模型
步骤3:模型增加skip和limit即可

  1. // 查 进阶排序分页玩法
  2. // model.find({}).skip(1).limit(2)
  3. // .then(res=>{
  4. // console.log(res)
  5. // //db2.close() 作用未知
  6. // return res
  7. // })
  8. // .catch(err=>{
  9. // console.log('查找失败' + err)
  10. // return false
  11. // })

bodyParser - body数据处理

一、简介

二、使用

先搭建一个简单的demo

  1. mkdir body-parser-demo
  2. cd body-parser-demo
  3. npm init -y
  4. npm install express body-parser --save

在根目录下创建index.js

  1. var express = require('express')
  2. var bodyParser = require('body-parser') //引入模块
  3. const localPort = 3000
  4. var app = express()
  5. var jsonParser = bodyParser.json() //使用中间件
  6. var urlencodedParser = bodyParser.urlencoded({ extended: false }) //// 使用第三方插件 qs 来处理
  7. app.post('/login.do', (req, res) => {
  8. console.log('********************')
  9. console.log(req.body)
  10. res.end();
  11. })
  12. app.listen(localPort, () => { //启动监听
  13. console.log('http://127.0.0.1:%s', host, port)
  14. })
  1. -------------------------------------- 自己的方法 ---------------------------------------------
  2. var bodyParser = require('body-parser') 引入模块
  3. // 使用中间件
  4. app.use(bodyParser.json()) // 支持 json 格式
  5. // 使用第三方插件 qs 来处理
  6. app.use(bodyParser.urlencoded({extended : true}))
  7. -------------------------------------------------------------------------------------

执行node index.js
网络模拟请求使用Postman工具
【node】 - express基础 - 图1
Postman
不使用中间件,直接获取body
执行结果:

  1. undefined

JSON解析器

  1. app.post('/login.do', jsonParser, (req, res) => {
  2. console.log('********************')
  3. console.log(req.body)
  4. res.end();
  5. })

Postman 以raw 方式发送JSON 数据,执行结果:

  1. { name: 'wang', password: '123456' }

注:如果在模拟器上以非JSON格式发送,则会获得一个空的JSON对象
urlencoded解析器

  1. app.post('/login.do', urlencodedParser, (req, res) => {
  2. console.log('********************')
  3. console.log(req.body)
  4. res.end();
  5. })

【node】 - express基础 - 图2

Postman

执行结果:

  1. { name: 'wang', password: '123456' }

加载到没有挂载路径的中间件

  1. // parse application/x-www-form-urlencoded
  2. app.use(bodyParser.urlencoded({ extended: false }))
  3. // parse application/json
  4. app.use(bodyParser.json())

具体详见GitHub README.md