2017-12-03 6 views
0

私はそのようなルーターがあります。私はこのようにそれを変更したいexpress.jsのネストされたコントローラにパラメータを渡すには?

app.get('/rest/userList', (req, res) => { 

    UserList.find({}, (err, users) => { 
     if (err) res.send(err); 
     res.json(users); 
    }); 
}); 

:しかし

app.get('/rest/userList', getUsers); 

function getUsers(req, res) { 
    UserList.find({}, createResponse); 
} 

function createResponse(err, users) { 
    if (err) return res.send(err); 
    return res.send(users); 
} 

を。 in createResponse関数 'res'は未定義です。どうやってやるの?

答えて

2

あなたはコールバックに追加のパラメータをバインドする.bind()を使用することができます。

app.get('/rest/userList', getUsers); 

function getUsers(req, res) { 
    UserList.find({}, createResponse.bind(null, res)); 
} 

function createResponse(res, err, users) { 
    if (err) return res.send(err); 
    return res.send(users); 
} 
+0

これは、私はDRY目的に到達しようとしたものを実際にあります! thnx! – Mar

1
app.get('/rest/userList', getUsers, createResponse); 

function getUsers(req, res, next) { 
    UserList.find({}, function (err, users) { 
     if (err) { 
      req.errr = err; 
     } else { 
      req.users = users; 
     } 

     next(); 
    }); 
} 

function createResponse(req, res) { 
    if (req.err) return res.send(req.err); 
    return res.send(req.users); 
} 
関連する問題