0

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

2 回答 2

4

您可以创建一个返回匿名函数的函数,该函数处理 mongoose 模型,但仍然可以通过闭包访问响应对象。

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));
}
于 2013-09-26T21:46:21.660 回答
2

查看Sriharsha 的回答,了解如何管理回调。


如果您出于某种原因不想这样做,那么您的逻辑很简单并且可以缩短为一个简单的三元运算符:

res.send(err ? 500 : obj);

例如

app.post('/user', function(req, res) {
  service.create(req.body, function(err, obj) { res.send(err ? 500 : obj); });
});
于 2013-09-26T21:34:31.707 回答