使用Express,我如何简化这段代码,特别是我传递的服务回调函数,它使用res变量,这意味着我不能事先声明该函数。
app.post('/user', function(req, res) {
service.create(req.body, function(err, obj) {
if (err) {
res.send(500);
} else {
res.send(obj);
}
});
});
app.put('/user/:id', function(req, res) {
service.update(req.params.id, req.body, function(err, obj) {
if (err) {
res.send(500);
} else {
res.send(obj);
}
});
});
app.delete('/user/:id', function(req, res) {
service.delete(req.params.id, function(err, obj) {
if (err) {
res.send(500);
} else {
res.send(obj);
}
});
});
app.get('/user/:id', function(req, res) {
service.read(req.params.id, function(err, obj) {
if (err) {
res.send(500);
} else {
res.send(obj);
}
});
});
答案 0 :(得分:4)
您可以创建一个函数来返回匿名函数,该函数处理猫鼬模型,但仍然可以通过闭包访问响应对象。
var serviceCallback = function(response){
return function(err, obj){
if (err) {
response.send(500);
} else {
response.send(obj);
}
}
}
app.post('/user', function(req, res) {
service.create(req.body, serviceCallback(res));
}
app.put('/user/:id', function(req, res) {
service.update(req.params.id, req.body, serviceCallback(res));
}
app.delete('/user/:id', function(req, res) {
service.delete(req.params.id, serviceCallback(res));
}
app.get('/user/:id', function(req, res) {
service.read(req.params.id, serviceCallback(res));
}
答案 1 :(得分:2)
请查看Sriharsha's answer,了解如何管理回调。
如果您出于某种原因不想这样做,那么您的逻辑很简单&它可以缩短为一个简单的三元运算符:
res.send(err ? 500 : obj);
e.g。
app.post('/user', function(req, res) {
service.create(req.body, function(err, obj) { res.send(err ? 500 : obj); });
});