Node Express,简化了mongoose的路由回调

时间:2013-09-26 20:54:15

标签: node.js express

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

2 个答案:

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