【发布时间】:2019-01-09 00:34:35
【问题描述】:
我是 Express 的新手,但我不断收到 404 错误,因为 something 正在向“/json/version”发出 GET 请求。它通过第一个app.use('/')并添加会话数据,然后忽略两个路由器,然后触发404错误处理。有谁知道它可能来自哪里?它阻碍了我的项目,我很沮丧。
我发现有人遇到了同样的问题here,但没有任何帮助(据我所知)。这个应用程序的大部分是从express-generator 生成的,只有我添加了会话,但我找不到来自express-session 的任何说明这是预期行为的文档。下面是我的代码。
// Package requirements
let createError = require('http-errors'),
express = require('express'),
session = require('express-session'),
path = require('path'),
cookieParser = require('cookie-parser'),
logger = require('morgan');
// Local requirements
let indexRouter = require('./routes/index'),
usersRouter = require('./routes/users');
// App definition
let app = express();
// View engine setup (EJS)
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');
// Session data
app.use(session({
secret: 'Super Secret',
}));
app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
app.use('/', (req, res, next) => {
req.session.id = 1;
next();
});
app.use('/', indexRouter);
app.use('/', usersRouter);
// Catch 404 and forward to error handler
app.use(function(req, res, next) {
next(createError(404));
});
// Error handler
app.use(function(err, req, res) {
// set locals, only providing error in development
res.locals.message = err.message;
res.locals.error = req.app.get('env') === 'development' ? err : {};
// render the error page
res.status(err.status || 500);
res.render('error');
});
// Specifies Node.js port
app.listen(3000, function() {
console.log('Listening on port 3000')
});
module.exports = app;
提前致谢!
【问题讨论】:
-
帮助!肯,你有没有找到解决办法?请分享,我花了几天时间。一切都工作了很长时间,然后我无缘无故地理解了这个顽固的错误。
-
我用下面的方法来捕捉它。我已经看到其他一些项目也这样做了。不确定它的确切来源。
app.get(['/json*', '/favicon.ico'], function(req, res) { res.status(204); });
标签: javascript node.js express routing