这张票的总议题是节点JS中间件和错误处理程序节点JS错误处理问题
当用户访问像site.com/user/username
一个链接,我想如果用指定的用户名的用户存在打印一条消息。
我写了2个中间件函数来实现:第一个是users
,第二个是errorHandler
。
但由于某种原因整个程序无法正常工作。请告诉我我错了哪里。 下面的代码:
let connect = require('connect');
let port = 3000;
let api = connect()
\t .use(users)
\t .use(errorHandler)
\t .listen(port);
var db = {
\t users: [
\t \t { name: 'tobi' },
\t \t { name: 'loki' },
\t \t { name: 'jane' }
\t ]
};
function users(req, res, next) {
\t var match = req.url.match(/^\/user\/(.+)/)
\t if (match) {
\t \t var user = db.users[match[1]];
\t \t if (user) {
\t \t \t res.setHeader('Content-Type', 'application/json');
\t \t \t res.end(JSON.stringify(user));
\t \t } else {
\t \t \t var err = new Error('User not found');
\t \t \t err.notFound = true;
\t \t \t next(err);
\t \t }
\t } else {
\t \t next();
\t }
}
function errorHandler(err, req, res, next) {
\t console.error(err.stack);
\t res.setHeader('Content-Type', 'application/json');
\t if (err.notFound) {
\t \t res.statusCode = 404;
\t \t res.end(JSON.stringify({ error: err.message }));
\t } else {
\t \t res.statusCode = 500;
\t \t res.end(JSON.stringify({ error: 'Internal Server Error' }));
\t }
}
'db.users [匹配[1]]'<< - 你不能像这样索引到一个对象数组。你需要循环,虽然数组为用户'user.name ===匹配[1]' –
确切地说,它总是显示'User not found' – Nick
,db.users [match [1]]将会返回'undefined'。你没有正确地进行查找。 –