【发布时间】:2020-12-22 08:50:24
【问题描述】:
我现在正在学习express,我很难理解express中的中间件流程。 例如,如果我有以下代码 从“快递”导入快递;
const app = express();
app.use((req,res,next)=>{
console.log("app.use");
res.send("hello")
})
app.use(express.static('public'));
app.listen(1234,()=>{
console.log("started at port:1234");
});
当我在浏览器中输入 localhost:1234 时,我将在终端 started at port:1234, app.use 和浏览器中获得以下信息。我理解这是因为第一个中间件有 res.send("hello") ,因此它发回 "hello" 而不将 res 传递给 app.use(express.static('public')) (公用文件夹有一个索引.html 在这种情况下未显示)
但是当我稍微修改代码时,我不再了解中间件的流程
const app = express();
app.use(express.static('public'));
app.use((req,res,next)=>{
console.log("app.use");
res.send("hello")
})
app.listen(1234,()=>{
console.log("started at port:1234");
});
这一次,当我在浏览器中键入 localhost:1234 时,我将在终端 started at port:1234 app.use app.use app.use 和 index.html 中得到以下内容。
首先,我不明白为什么我的浏览器中没有“你好”。我了解app.use(express.static('public')); 但是 app.use 出现在app.use(express.static('public')); 内部有一个 res.send("hello") 之后,因此发回的请求应该是“hello”而不是 index.html?
其次,为什么终端显示“app.use”不止一次? app.use((req,res,next)=>{console.log("app.use");res.send("hello")}) 应该只执行一次吗?更不用说它里面有一个 res.send 。
任何人都可以请给我解释一下吗?感谢您的帮助
【问题讨论】:
标签: express middleware