【问题标题】:Understanding HTTP status response了解 HTTP 状态响应
【发布时间】:2021-02-11 17:21:46
【问题描述】:

假设我有一个 api.js

const {somefunction} = require('../controllers/some-controller');
app.get('/data/', somefunction);

some-controller.js:

exports.somefunction = async (req, res,next) => {
    const someVariable = req.params.variable
    try {
        console.log('status',res.statusCode) **//status code is: 200**
        const Details = await collectionName.find({}).exec()
        res.send(Details)
    } catch {
        console.log('status',res.statusCode) **//Here also,status code is: 200**
        next(ApiError.dbError('Internal Server Error')); //middleware for error handling gives output 
                                                         //as ApiError { code: 500, message: 
                                                         //'Internal Server Error' }
        return;
    }
};

假设我在 res.send(Detaaal) 中写了一些错误的变量名,它会去 catch 块 这里甚至在 catch 块状态码是 200。

我试图了解状态代码在什么情况下不同。为什么在 catch 块内失败的状态码响应没有给我 500 状态码。

【问题讨论】:

  • ApiError.dbError 返回什么?
  • 我想出了它如何返回 500 错误。在 catch 块中 if i console: catch { console.log('status',res.statusCode) //这里同样,状态码是:200 next(ApiError.dbError('Internal Server Error')); console.log('status',res.statusCode) //这里也是,状态码是:500 return;从 APIError 的状态码我得到状态码并相应地设置它

标签: javascript node.js express


【解决方案1】:

200 是默认代码,没有任何事情会改变它。

您还没有编写代码来更改它,并且在引发异常时,您捕获了它,因此它永远不会遇到 Express 自己的 catch 逻辑,该逻辑会设置 500 错误。

另一方面,next 函数确实 似乎改变了它,但您正在查看在运行该函数之前 的值。

【讨论】:

    【解决方案2】:

    对不起我的英语不好

    你在这里的逻辑导致你收集所有东西甚至是空的问题

    const Details = await collectionName.find({}).exec()
    

    当集合为空时没有错误只是返回这样的空数组[] 您必须创建一个条件以防止发送空提交这里是我的解决方案

    exports.somefunction = async (req, res,next) => {
      const someVariable = req.params.variable
      try {
          console.log('status',res.statusCode) **//status code is: 200**
          const Details = await collectionName.find({}).exec()
          if (Details.length===0) {
            return res.status(404).send();
          }
          res.send(Details)
      } catch {
          console.log('status',res.statusCode) **//Here also,status code is: 200**
          next(ApiError.dbError('Internal Server Error')); //middleware for error handling gives output 
                                                           //as ApiError { code: 500, message: 
                                                           //'Internal Server Error' }
          return;
      }
    };
    

    【讨论】:

      猜你喜欢
      • 2012-06-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-08
      相关资源
      最近更新 更多