这是我的代码在这里..
const express = require('express');
const app = express();
let myFunc = function (req, res, next) {
console.log('This is middleware');
next();
}
app.use(myFunc);
app.get('/', (req, res) => {
console.log('This is get /');
res.send('Hello World!');
});
app.listen(3000, () => {
console.log('Server is running at port 3000....');
});
在此过程中,我创建了一个名为myFunc的中间件,但输出结果并非我想的那样
Server is running at port 3000....
This is middleware
This is get /
This is middleware
答案 0 :(得分:2)
app.use都会运行。在这种情况下,您触发两次。 app.get和app.listen
答案 1 :(得分:1)
正如@DavidWhite所说,每次触发应用程序时app.use都在运行。在这 如果您触发两次。 app.get和app.listen 您应该以这种方式使用中间件
const express = require('express');
const app = express();
let myFunc = function (req, res, next) {
console.log('This is middleware');
next();
}
app.get('/', myFunc,(req, res) => {
console.log('This is get /');
res.send('Hello World!');
});
app.listen(3000, () => {
console.log('Server is running at port 3000....');
});
答案 2 :(得分:1)
发生这种情况是因为浏览器正在请求两个文件。第一个用于/
,第二个可能用于favicon.ico
。如果要查看为什么为什么被调用,请将您的一个函数更改为如下所示:
let myFunc = function (req, res, next) {
console.log('This is middleware', req.originalUrl);
next();
}
然后,它将输出每次浏览器访问服务器时所请求的URL。
答案 3 :(得分:0)
使用app.use(myFunc);
时,会将中间件应用于所有应用程序。
您正在使用app.get和app.listen,这就是中间件触发两次的原因。尝试在获取查询中使用Middlewere
答案 4 :(得分:-1)
您的静态文件还与您尝试使用的URL共享相同的URL。 因此,您很可能会遇到以下情况: 本地主机:3000 /:变量
此网址将匹配很多内容