這張票的總議題是節點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'。你沒有正確地進行查找。 –