关于中间件的问题?
发布于 10 年前 作者 beilunyang 3888 次预览 最后一次回复是 10 年前 来自 问答
var app = require(‘express’)(); app.use(function(req,res,next){ console.log(‘请求成功。。。’); next(); }); app.get(’/’,function(req,res,next){ console.log(‘有一个错误被抛出。。。’); throw new Error(‘第一个错误’); }); app.use(’/’,function(req,res,next){ console.log(‘哈哈哈。。。’); }); app.use(’/’,function(error,req,res,next){ console.log(‘检测到错误但不传递’); next(); }); app.use(function(error,req,res,next){ console.log(‘检测并处理错误。’+error.message); res.send(‘500-服务器出错。’); }); app.use(function(req,res){ console.log(‘未处理错误。’); res.send(‘404-未找到页面。’); }); app.listen(3000,function(){ console.log(‘监听到端口 3000’); });
运行这一段代码,为什么请求成功会执行两次。。 运行结果: 监听到端口 3000 请求成功。。。 有一个错误被抛出。。。 检测到错误但不传递 未处理错误。 请求成功。。。 哈哈哈。。。
6 回复
你看看
req.path应该是有一个请求图标的请求
/favicon.ico@William17 的确是favicon.ico的原因,但为什么console.log(‘哈哈哈。。。’),这个中间件也会被调用。req.path的路径是‘/favicon.ico’。。。
@beilunyang 你
console.log(‘哈哈哈。。。’)那中间件是app.use('/')如果中间没出错,所有请求都会match@William17 是不是app.use(’/’) == app.use(’/’) == app.use(); 都是匹配所有。。。而app.get(’/’) 则!=app.get(’/’);
@beilunyang
app.use([path,] function [, function...])app.METHOD(path, callback [, callback ...])app.use是middleware, 只要req.path以middleware的模式开始,就会被执行app.METHOD是route,需要req.path匹配route的模式,才可能被执行最好自己看文档和例子…
先用markdown把实例代码组织好, 这一眼就不想看问题了