Published on

Express使用一

Authors
  • avatar
    Name
    Et cetera
    Twitter
首先介绍原生基于node.js中http模块开启服务
const http = require('http')

// 创建一个服务器
const server = http.createServer((request, response) => {
  res.end('ONE OK ROCK')
})

// 开启对应服务器,并监听对应端口
// 端口通常1025~65535之间
server.listen(3000, () => {
  console.log('http server success')
})
同样使用express开一个服务对比
// express 基本启动服务
const express = require('express')

const app = express()

app.listen(3000, () => {
  console.log('express服务启动成功')
})

express优化部分

  • express 对比 http 服务在路由上不用通过 request 对象的 url 属性进行判断
// http 中
const server = http.createServer((request, response) => {
  const url = req.url
  const method = req.method

  if (url === '/login' && method === 'POST') res.end('Loign')
})

// express 直接监听路由以及请求方法
app.post('/login', (request, respose, next) => {
  res.end('登录成功')
})

// 也可以通过常规中间件
app.use((req, res, next) => {
  if (req.url === '/login') res.end('登录成功')
})

// 路径匹配中间件
// 只会限制路径,对请求方法没有限制
app.use('/login', (req, res, next) => {
  // 同样可以通过req.method限制请求方法
  res.end('登录成功')
})

多个中间件的注册方式

app.get(
  '/',
  (req, res, next) => {
    console.log('aaa')
    // next 和终止操作不能同时存在,如:res.end(),res.send()
    next()
  },
  (req, res, next) => {
    res.send('<p>Second 2</p>')
  }
)

express简介:express是一个路由和中间件的Web框架,本身功能有限;而其本质上是一系列中间件函数的调用

中间件的本质是传递给express的一个回调函数:共接收三个参数

  • request对象
  • response对象
  • nest函数(在express中定义的用于执行下一个中间件的函数)
解析express.json()方法
app.use((req, res, next) => {
  if (req.headers['content-type'] === 'application/json') {
    req.on('data', (data) => {
      const userInfo = JSON.parse(data.toString())
      req.body = userInfo
    })
    req.on('end', () => {
      next()
    })
  } else {
    next()
  }
})
// 上面基本逻辑等于
app.use(express.json())

app.post('/login', (req, res, next) => {
  console.log(req.body)
  res.end('登录成功')
})