我在nodejs / express项目中有一个中间件功能docker-compose
,用于检查提交的auth_deviceid
。如果device_id不满足特定条件,则应终止请求-响应周期。我想知道我的代码是否正确以结束请求-响应周期。这是device_id
:
auth_deviceid
上面的中间件函数在路由中被调用:
module.exports = function(req, res, next) {
const user_device_id = (req.query._device_id || req.body._device_id);
if (!user_device_id || user_device_id.length < 10) return res.status(400).send('Missing device id!');
next();
}
我的问题是,如果router.post('/verif', [auth_deviceid], async (req, res) => {....}
为空,上面的router.post是否会被拒绝(user_device_id
返回false)?
答案 0 :(得分:1)
我们看起来不错,如果不满足条件,您将通过res.send()
返回,该内部调用res.end()
。
答案 1 :(得分:1)
让我们res.send
而不是在中间件中调用next
,然后通过一个错误处理程序处理所有错误。
中间件
module.exports = function(req, res, next) {
const user_device_id = (req.query._device_id || req.body._device_id);
if (!user_device_id || user_device_id.length < 10) return next(new Error('MISSING_DEVICE_ID'));
// I like a custom error like `new MissingDeviceError()`
next();
}
然后,在您的express app错误处理程序中,只需检查错误类型:
app.use(function (err, req, res, next) {
console.error(err.stack)
if (err.message === 'MISSING_DEVICE_ID') {
return res.status(400).send('Missing device id!');
}
// another error
res.status(500).send('Something broke!')
})