我正在尝试设置一个在每次页面加载时调用的全局函数,无论它在我的网站中的位置如何。根据 Express 的 API,我使用过
app.all("*", doSomething);
在每个页面加载时调用函数 doSomething ,但它并不完全有效。该函数在每个页面加载时触发,除了基本域的页面加载(例如http://domain.com/pageA将调用该函数,但http://domain.com不会)。有谁知道我做错了什么?
谢谢!
我正在尝试设置一个在每次页面加载时调用的全局函数,无论它在我的网站中的位置如何。根据 Express 的 API,我使用过
app.all("*", doSomething);
在每个页面加载时调用函数 doSomething ,但它并不完全有效。该函数在每个页面加载时触发,除了基本域的页面加载(例如http://domain.com/pageA将调用该函数,但http://domain.com不会)。有谁知道我做错了什么?
谢谢!
我打赌你把
app.get('/', fn)
以上
app.all("*", doSomething);
请记住,Express 将按照它们注册的顺序执行中间件函数,直到有东西发送响应
我知道这是一个旧的,但仍然可能对某人有用。
我认为问题可能是:
app.use(express.static(path.join(__dirname, 'public')));
var router = express.Router();
router.use(function (req, res, next) {
console.log("middleware");
next();
});
router.get('/', function(req, res) {
console.log('root');
});
router.get('/anything', function(req, res) {
console.log('any other path');
});
在任何路径上调用中间件的位置,但是/
发生这种情况是因为 express.static 默认服务public/index.html
于/
要解决它,请将参数添加到静态中间件:
app.use(express.static(path.join(__dirname, 'public'), {
index: false
}));
链中的 app.all('*') 在哪里?如果它在所有其他路由之后,它可能不会被调用。
app.post("/something",function(req,res,next){ ...dothings.... res.send(200); });
app.all('*',function(req,res) { ...this NEVER gets called. No next and res already sent });
除非您打算让它排在最后,在这种情况下,您必须确保在前面的路线中调用 next()。例如:
app.post("/something",function(req,res,next){ ...dothings.... next();});
app.all('*',function(req,res) { ...this gets called });
另外,doSomething 中有什么?你确定它没有被调用吗?
如果你想在每个请求上运行一些代码,你不需要使用路由器。
只需在路由器上方放置一个中间件,每个请求都会调用它:
app.use(function(req, res, next){
//whatever you put here will be executed
//on each request
next(); // BE SURE TO CALL next() !!
});
希望这可以帮助
我也有这个问题,我发现你的doSomething
函数的参数数量可能是一个因素。
function doSomething(req, res, next) {
console.log('this will work');
}
然而:
function doSomething(req, res, next, myOwnArgument) {
console.log('this will never work');
}