このチケットの一般的なトピックは、ノードjsのミドルウェアとエラーハンドラ ノードJSエラーハンドラ問題
ユーザーがsite.com/user/username
のようなリンクにアクセス
私はこれを実装するために2つのミドルウェア関数を書いています。最初のものはusers
であり、2番目のものはerrorHandler
です。
しかし、何らかの理由でプログラム全体が機能しません。私が間違っていた場所を教えてください。私は問題があなたのDBオブジェクトの間違った部分で解決策を探していると思う
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]]' <<あなたの配列を検索するarray.prototype.find方法を使用することをお勧めしますこのようなオブジェクトの配列にインデックスを付けることはできません。 'user.name === match [1]' –
正確には、常に「User not found」と表示されます – Nick
正確には、db.users [match [1]]が返されます'undefined'です。ルックアップを正しく実行していません。 –