2017-10-13 12 views
0

このチケットの一般的なトピックは、ノード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 } 
 
}

+0

'db.users [マッチ[1]]' <<あなたの配列を検索するarray.prototype.find方法を使用することをお勧めしますこのようなオブジェクトの配列にインデックスを付けることはできません。 'user.name === match [1]' –

+0

正確には、常に「User not found」と表示されます – Nick

+0

正確には、db.users [match [1]]が返されます'undefined'です。ルックアップを正しく実行していません。 –

答えて

0

: は、ここでは、コードです。あなたが - それはdb.users[0].name = 'toby'を探してしなければならない時に書かれたようにコードがdb.users['toby']を探している私は名前

function users(req, res, next) { 
    let match = req.url.match(/^\/user\/(.+)/) 

    if (!match) { next() } 

    let user = db.users.find(v => v.name === match); 

    if (user === undefined) { 
    let err = new Error('User not found') 
    err.notFound = true; 
    next(err); 
    } 

    res.setHeader('Content-Type', 'application/json'); 
    res.end(JSON.stringify(user)); 
} 
0

const users = [ 
 
    { name: 'tobi' }, 
 
    { name: 'loki' }, 
 
    { name: 'jane' } 
 
]; 
 

 
findUser = userName => { for (let user of users) if (user.name === userName) return user; } 
 

 
console.log(findUser('tobi'));

関連する問題