拦截器不起作用

来源:6-4 项目框架优化

宝慕林4472654

2021-07-05

照抄源码也会有问题 没法拦截404
request : http://localhost:5000/1234
显示: Cannot GET /1234

把拦截器前置是可以触发的 不知道是否版本问题

package.json

{
  "name": "admin-imooc-node",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [],
  "author": "",
  "license": "ISC",
  "dependencies": {
    "boom": "^7.3.0",
    "express": "^4.17.1"
  }
}

app.js

const express = require('express')
const router  = require('./router')

// 创建 express 应用
const app = express()


// 监听 / 路径的 get 请求
app.get('/', router)


// 使 express 监听 5000 端口号发起的 http 请求
const server = app.listen(5000, function() {
  const { address, port } = server.address()
  console.log('Http Server is running on http://%s:%s', address, port)
})

router/index.js

const express = require('express')
const boom = require('boom')
const userRouter = require('./user')
const {
  CODE_ERROR
} = require('../utils/constant')

// 注册路由
const router = express.Router()


router.get('/', function(req, res) {
  res.send('欢迎学习小慕读书管理后台')
})

// 通过 userRouter 来处理 /user 路由,对路由处理进行解耦
router.use('/user', userRouter)

/**
 * 集中处理404请求的中间件
 * 注意:该中间件必须放在正常处理流程之后
 * 否则,会拦截正常请求
 */
router.use((req, res, next) => {
  next(boom.notFound('接口不存在'))
})

/**
 * 自定义路由异常处理中间件
 * 注意两点:
 * 第一,方法的参数不能减少
 * 第二,方法的必须放在路由最后
 */
router.use((err, req, res, next) => {
  const msg = (err && err.message) || '系统错误'
  const statusCode = (err.output && err.output.statusCode) || 500;
  const errorMsg = (err.output && err.output.payload && err.output.payload.error) || err.message
  res.status(statusCode).json({
    code: CODE_ERROR,
    msg,
    error: statusCode,
    errorMsg
  })
})

module.exports = router








写回答

1回答

扬_灵

2021-07-05

同学你好,这里显示的应该是接口不存在的提示信息,是有什么问题吗。

0
2
扬_灵
回复
宝慕林4472654
同学你好,这是因为app.get('/', router)只监听了/,/1234不存在时, 下面的错误处理路由没有执行到,改成app.use('/', router)就可以了。
2021-07-06
共2条回复

Vue Element+Node.js开发企业通用管理后台系统

基于Element的中后台课程,一套中小型企业通用的后台管理系统

2829 学习 · 1714 问题

查看课程