什么是express?

Express是一个盛行的Node.js Web应用程序结构,用于构建灵敏且可扩展的Web应用程序和API。它是依据Node.js的HTTP模块而创建的,简化了处理HTTP恳求、呼应和中间件的过程。

  1. 简洁而灵敏:Express供给了简略而直观的API,使得构建Web应用程序变得简略快捷。它供给了一组灵敏的路由和中间件机制,使开发人员能够依据需求定制和组织应用程序的行为。
  2. 路由和中间件:Express运用路由和中间件来处理HTTP恳求和呼应。开发人员能够定义路由规则,将特定的URL途径映射到相应的处理函数。一起,中间件答应开发人员在恳求到达路由处理函数之前或之后履行逻辑,例如身份验证、日志记载和错误处理。
  3. 路由模块化:Express支撑将路由模块化,使得应用程序能够依据不同的功用或模块进行分组。这样能够进步代码的组织性和可保护性,使得多人协作开发更加快捷。
  4. 视图引擎支撑:Express能够与各种模板引擎集成,例如EJS、Pug(曾经称为Jade)、Handlebars等。这使得开发人员能够方便地生成动态的HTML页面,并将数据动态渲染到模板中。
  5. 中间件生态系统:Express有一个巨大的中间件生态系统,开发人员能够运用各种中间件来扩展和增强应用程序的功用,例如身份验证、会话办理、日志记载、静态文件服务等。

编码

  • 启动一个http服务
import express from 'express';
const app = express() //express 是个函数
app.listen(3000, () => console.log('Listening on port 3000'))
app.get('/', (req, res) => {
    res.send('get')
})
app.post('/create', (req, res) => {
    res.send('post')
})
app.use(express.json()) //假如前端运用的是post并且传递json 需要注册此中间件 不然是undefined
app.get('/', (req, res) => {
    console.log(req.query) //get 用query
    res.send('get')
})
app.post('/create', (req, res) => {
    console.log(req.body) //post用body
    res.send('post')
})
//假如是动态参数用 params
app.get('/:id', (req, res) => {
    console.log(req.params)
    res.send('get id')
})

模块化

咱们正常开发的时分必定不会把代码写到一个模块里面,Express答应将路由处理程序拆分为多个模块,每个模块负责处理特定的路由。通过将路由处理程序拆分为模块,能够使代码逻辑更清晰,易于保护和扩展

src
 --user.js
 --list.js
app.js

src/user.js

import express from 'express'
const router = express.Router() //路由模块
router.post('/login', (req, res) => {
    res.send('login')
})
router.post('/register', (req, res) => {
    res.send('register')
})
export default router

app.js

import express from 'express';
import User from './src/user.js'
const app = express()
app.use(express.json())
app.use('/user', User)
app.get('/', (req, res) => {
    console.log(req.query)
    res.send('get')
})
app.get('/:id', (req, res) => {
    console.log(req.params)
    res.send('get id')
})
app.post('/create', (req, res) => {
    console.log(req.body)
    res.send('post')
})
app.listen(3000, () => console.log('Listening on port 3000'))

中间件

中间件是一个要害概念。中间件是处理HTTP恳求和呼应的函数,它坐落恳求和最终路由处理函数之间,能够对恳求和呼应进行修正、履行额外的逻辑或者履行其他使命。

中间件函数接纳三个参数:req(恳求目标)、res(呼应目标)和next(下一个中间件函数)。通过调用next()办法,中间件能够将控制权传递给下一个中间件函数。假如中间件不调用next()办法,恳求将被间断,不会继续传递给下一个中间件或路由处理函数

  • 实现一个日志中间件
npm install log4js

log4js是一个用于Node.js应用程序的盛行的日志记载库,它供给了灵敏且可装备的日志记载功用。log4js答应你在应用程序中记载不同等级的日志音讯,并能够将日志音讯输出到多个目标,如控制台、文件、数据库等

expressmiddlewarelogger.js

import log4js from 'log4js';
// 装备 log4js
log4js.configure({
  appenders: {
    out: {
      type: 'stdout', // 输出到控制台
      layout: {
        type: 'colored' // 运用带颜色的布局
      }
    },
    file: {
      type: 'file', // 输出到文件
      filename: './logs/server.log', // 指定日志文件途径和名称
    }
  },
  categories: {
    default: {
      appenders: ['out', 'file'], // 运用 out 和 file 输出器
      level: 'debug' // 设置日志等级为 debug
    }
  }
});
// 获取 logger
const logger = log4js.getLogger('default');
// 日志中间件
const loggerMiddleware = (req, res, next) => {
  logger.debug(`${req.method} ${req.url}`); // 记载恳求办法和URL
  next();
};
export default loggerMiddleware;

app.js

import express from 'express';
import User from './src/user.js'
import loggerMiddleware from './middleware/logger.js';
const app = express()
app.use(loggerMiddleware)

Nodejs 第二十九章(express)