2017-12-03 2 views
0

나는 그런 라우터가 그러나express.js의 중첩 컨트롤러에 매개 변수를 전달하는 방법은 무엇입니까?</p> <pre><code>app.get('/rest/userList', (req, res) => { UserList.find({}, (err, users) => { if (err) res.send(err); res.json(users); }); }); </code></pre> <p>내가 이런 식을 변경하려면 :

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); 
}