Node.js 节点/Express 4中间件不工作
我有一个用express generator生成的应用程序,有一个bin/www文件和一个app.js文件。在app.js中,我添加了以下内容:Node.js 节点/Express 4中间件不工作,node.js,express,middleware,express-generator,Node.js,Express,Middleware,Express Generator,我有一个用express generator生成的应用程序,有一个bin/www文件和一个app.js文件。在app.js中,我添加了以下内容: app.use(function(req, res, next){ console.log("--------new middleware"); next(); }); 但它根本没有调用中间件。应用程序的其余部分工作正常,我已经确认服务器正在运行并接收请求 以下是app.js: var express = requir
app.use(function(req, res, next){
console.log("--------new middleware");
next();
});
但它根本没有调用中间件。应用程序的其余部分工作正常,我已经确认服务器正在运行并接收请求
以下是app.js:
var express = require('express');
var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var session = require('express-session');
var passport = require('passport');
var routes = require('./routes/index');
var users = require('./routes/users');
//很多路线
var app = express();
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'hbs');
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
app.use(session({ secret: 'separation anxiety' }));
app.use(passport.initialize());
app.use(passport.session());
app.use('/', routes);
app.use('/users', users);
//很多路
app.use(function(req, res, next){
console.log("--------new middleware");
next();
});
// app.use(auth.isLoggedIn);
// catch 404 and forward to error handler
app.use(function(req, res, next) {
var err = new Error('Not Found');
err.status = 404;
next(err);
});
// development error handler
// will print stacktrace
if (app.get('env') === 'development') {
app.use(function(err, req, res, next) {
res.status(err.status || 500);
res.render('error', {
message: err.message,
error: err
});
});
}
// production error handler
// no stacktraces leaked to user
app.use(function(err, req, res, next) {
res.status(err.status || 500);
res.render('error', {
message: err.message,
error: {}
});
});
module.exports = app;
关于Express中间件,需要了解的一件重要事情是,它是按照声明的顺序调用的 如果任何声明的中间件通过发送回响应来处理请求,则该请求不会传递给在处理该请求的中间件之后声明的任何中间件 因此,如果在声明了所有其他中间件之后添加一个catch-all中间件,那么很可能不会将任何请求传递给您的中间件,因为它是在其他地方处理的 要解决这个问题,请在中间件链的某个较高位置声明中间件。在您的情况下,请尝试在express.static之前声明它: 它将取决于中间件的最终目标,即中间件链中的正确位置
或者,由于您在404处理程序的正上方添加了中间件,请尝试从您的服务器请求一个不存在的URL;这也会触发中间件。中间件的函数签名错误。没有错误的论点。正如我上面的帖子所说,我也试过了,但没有。我也试过了,没有前面的错误。我应该说得更清楚。你的服务器还在运行吗?你有什么要求吗?如果app.get“/”,则。。。甚至不工作,那么您的服务器可能未运行或未正确初始化。您的第二个代码块是正确的,如果其他事情都正确完成,它将正常工作。所以,如果第二个代码块不起作用,那么代码中还有一些错误,您还没有公开。我们必须查看您的代码的其余部分才能知道还有什么错误。您编写的第二个代码工作正常。确保您的服务器已关闭running@Mankind1023你可能在app.js的底部添加了你的中间件,对吗?因此请求一个不存在的URL确实触发了它,有没有办法让它在每次呼叫或至少每个路由上运行?@Mankind1023是的,将它移到上面声明路由的位置。好的,所以把它放在文件的顶部似乎就可以了,谢谢!
app.use(function(req, res, next){
console.log("--------new middleware");
next();
});
app.use(express.static(path.join(__dirname, 'public')));