Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/417.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 理解HTTP状态响应_Javascript_Node.js_Express - Fatal编程技术网

Javascript 理解HTTP状态响应

Javascript 理解HTTP状态响应,javascript,node.js,express,Javascript,Node.js,Express,假设我有一个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 {

假设我有一个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 block 这里,即使在catch块中,状态代码也是200


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

很抱歉我的英语不好

您在这里的逻辑导致了问题,您正在获取集合中的所有内容,即使它是空的

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;
  }
};

对不起,我的英语很差

您在这里的逻辑导致了问题,您正在获取集合中的所有内容,即使它是空的

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;
  }
};

200是默认代码,没有发生任何会改变这一点的事情

您还没有编写代码来更改它,并且在抛出异常时,您捕获了它,因此它不会点击Express'own
catch
逻辑,这将设置500个错误


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

200是默认代码,没有发生任何会改变该值的事情

您还没有编写代码来更改它,并且在抛出异常时,您捕获了它,因此它不会点击Express'own
catch
逻辑,这将设置500个错误


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

APIRERROR.dbError返回什么?我知道它如何返回500个错误。在catch块中,如果i console:catch{console.log('status',res.statusCode)//这里的状态代码也是:200 next(apierro.dbError('Internal Server Error');console.log('status',res.statusCode)//这里的状态代码也是:500 return;}从APIRROR的staus代码中,我得到状态代码,并根据APIRROR.dbError返回什么?我知道它如何返回500个错误。在catch块中,如果我控制台:catch{console.log('status',res.statusCode)//这里的状态代码也是:200 next(apirer.dbError('Internal Server Error');console.log('status',res.statusCode)//这里的状态代码是:500 return;}从apirer的status代码中我得到状态代码并相应地设置它