Javascript 理解HTTP状态响应
假设我有一个api.js: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 {
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'owncatch
逻辑,这将设置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代码中我得到状态代码并相应地设置它