优化 Node.js 中的 API 请求

Jam*_*een 5 javascript api json node.js

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

exports.getUserList = (req, res, next) => {
  User.find().sort({ name: 1 }).then(users => {
    res.json({
      status: 'success',
      users
    });
  }).catch(next);
};
Run Code Online (Sandbox Code Playgroud)

如示例中所示,我使用.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
    });
  });
};
Run Code Online (Sandbox Code Playgroud)

但它不应该是这样的res.status(some_status_code).json({})吗?

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

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

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

小智 0

您是否尝试过异步/等待函数和自定义响应以获取成功和错误?这里是例子:

响应处理程序.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
}
Run Code Online (Sandbox Code Playgroud)

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
  });
};
Run Code Online (Sandbox Code Playgroud)