Javascript 优化Node.js中的API请求

Javascript 优化Node.js中的API请求,javascript,json,node.js,api,Javascript,Json,Node.js,Api,我在Node.js中有一个API。我的路线看起来像 exports.getUserList = (req, res, next) => { User.find().sort({ name: 1 }).then(users => { res.json({ status: 'success', users }); }).catch(next); }; 如示例所示,我使用.catch(next)。但这是正确的方法吗?路由不应该总是打印jso

我在Node.js中有一个API。我的路线看起来像

exports.getUserList = (req, res, next) => {
  User.find().sort({ name: 1 }).then(users => {
    res.json({
      status: 'success',
      users
    });
  }).catch(next);
};
如示例所示,我使用
.catch(next)
。但这是正确的方法吗?路由不应该总是打印json吗

所以我想做一些类似的事情

exports.getUserList = (req, res, next) => {
  User.find().sort({ name: 1 }).then(users => {
    res.json({
      status: 'success',
      users
    });
  }).catch(err => {
    res.json({
      status: 'error',
      msg: err
    });
  });
};
但是它不应该是类似于
res.status(some_status_code).json({})

在错误处理方面,一个简单的API通常是如何执行的

如果我在代码中使用未定义的变量(即导致语法错误),该怎么办?我应该用JSON错误来处理它,还是只是确保我不做草率的编码-D


另外,这是打印json的最快方式吗?我的意思是,我应该使用
User.find().lean()
?我应该做一些缓存吗?将我的API存储在一个普通网站上是否更聪明,或者是否有针对此类情况的优化API服务器?

您是否尝试过异步/等待功能和自定义响应以获得成功和错误? 下面是一个例子:

responseHandler.js

// use this for success
function successResponse(message, data) {
  const success = {
    success: true,
    message: message,
    data: data
  }
  return success
}

// use this as middleware error handler
function errorResponse(err,req,res,next) => {
  return res.status(err.status || 500).json({
    success: false,
    message: err.message
  })
}

module.exports = {
  successResponse,
  errorResponse
}
myRouter.js

const { successResponse } = require('./responseHandler')

exports.getUserList = async (req, res, next) => {
  await User.find().sort({ name: 1 }).then(users => {
    res.status(200).json(
      successResponse(`data user`, users)
    )
  }).catch(err => {
    return err
  });
};

你问了很多好问题。但这都是偏好的问题。我所做的:在catch中,我检查它是什么类型的错误,根据这一点,如果我不能找出错误原因,我要么返回一个
404
400
401
,要么返回一个
500
。如果您想返回
JSON
,那么错误代码由您自己决定。当出现错误时,我通常返回
无内容
。打印
JSON
的最快方法:不知道,但这就是使用
Express
的方法。关于缓存和优化,我总是想到“过早优化是万恶之源”这句话。首先尝试让它工作。这里有一个来自官方的
ExpressJS
网站的很棒的页面,上面有他们对您的一些问题的建议:
{status:'error'}
不会添加任何内容,除非您拒绝发送准确的HTTP错误代码。HTTP API设计中的一个常见错误是在交换格式中复制HTTP的子集。如果您是在HTTP之上构建的,请利用它提供的功能,只为HTTP无法表达的内容创建模式!