NodeJS,返回res.json是一种不好的做法

时间:2014-04-07 01:14:58

标签: node.js express

我正在使用NodeJS构建ExpressJS应用程序。我的问题是,如果我这样做有任何性能差异

app.get('/test', function(req, res) {
    fn(function(err, data) {
        if (err) {
            return res.json(400, {
                error: 1,
                msg: "some error"
            });
        }

        ///more code
    });
});

而不是

app.get('/test', function(req, res) {
    fn(function(err, data) {
        if (err) {
            res.json(400, {
                error: 1,
                msg: "some error"
            });
            return;
        }

        ///more code
    });
});

返回res变量使服务器上的任何额外负载。这两个代码都有效,只有第一个看起来更好,我省了1行。

3 个答案:

答案 0 :(得分:8)

相反,我认为很多人会告诉你这种成语是一种非常合理的练习,因为它向读者(通常是你未来的自我)表明你正在退出。在这种特殊情况下,策略的优点是你可以节省更多的代码,因为你现在在条件分支中只有一个语句,这意味着你可能会丢失一些大括号。

app.get('/test', function(req, res) {
    fn(function(err, data) {
        if (err)  return res.json(400, {
                    error: 1,
                    msg: "some error"
                 });
    ///more code
    });
});

但你问是否存在性能差异。如果有,我认为这几乎是不可察觉的。

答案 1 :(得分:0)

返回函数中的对象不会产生额外负载。

答案 2 :(得分:0)

在你的例子中,基于回调函数,没有区别。 但是如果app.get返回Promise会怎么样?

此代码将提供未处理的拒绝错误

app.get('/test')
.then( (data) => 
{ /* do something with your data that can throw a functional error 
for exemple request for a user on your database based on your data */ 
  if (!user) res.json(401, {msg: 'USER NOT FOUND'});
  if (user.someProperty) //will throw an error when user is not found
   res.json(200, {msg: 'USER DID IT'});
})
.catch( (err) => {
  res.json(500, {msg: 'OUTCH'});
  throw(err);
});

此代码不会

app.get('/test')
.then( (data) => 
{ /* do something with your data that can throw a functional error 
for exemple request for a user on your database based on your data */ 
  if (!user) return res.json(401, {msg: 'USER NOT FOUND'});
  if (user.someProperty) //will not be evaluate when user is not found
   return res.json(200, {msg: 'USER DID IT'});
})
.catch( (err) => {
  res.json(500, {msg: 'OUTCH'});
  throw(err);
});

使用promise时总是返回;)