我正在使用nodejs和multer创建文件上传,我的问题是json网页令牌在cookie中过期(如果未过期,则可以正常工作)并且我执行发布请求,ERR_CONNECTION_RESET(在极少数情况下,第一个ERR_CONNECTION_ABORTED发生在ERR_CONNECTION_RESET之前)发生。我确定问题出在问题上,因为正如我所研究的那样,我知道该错误与cookie有关,这是正确的,因为像往常一样,当jwt过期后我执行发布请求时(根据我的身份验证中间件cookie,也删除了)cookie不会被删除。
我已经尝试过这种方法:为保存jwt的jwt和cookie设置相同的到期日期; multer错误处理。但他们都不起作用
这是我的中间件代码
const guard = (req, res, next) =>{
const token = req.body.token ||
req.query.token ||
req.headers['x-access-token'] ||
req.cookies.token;
if(!token){
return res.status(401).send({redirect: true, location: '/sign-in'})
}
else{
jwt.verify(token, process.env.SECRET, function (err,decoded){
if(err){
if(err.message === 'jwt expired'){
res.clearCookie('token')
return res.status(401).send({redirect: true, location: '/sign-in'})
}
console.log(err.message)
return res.status(500).send({
message: err.message
})
}
req.userId = decoded.id;
next()
})
}
}
以及用于处理发布(不仅是)请求的路线的替代代码和代码
const storage = multer.diskStorage({
destination: (req, file, callback) => {
const userPath = path.join(imgStoragePath, req.userId);
fs.mkdir(
userPath,
() => callback(null, userPath)
)
},
filename: (req, file, callback) => {
const filenameParts = file.originalname.split('.');
const ext = filenameParts.pop();
const basename = filenameParts.join('.');
const additionalPath = Date.now() + '' + uuid() + '' +
Math.floor(Math.random() * (2000 - 500)) + 500;
callback(null, basename + '-' + additionalPath + '.' + ext);
},
})
const upload = multer({
storage,
limits: '1mb',
}).array('image')
router.post('/', upload, async (req, res) => {
try {
const {
//variables
} = req.body
console.log('file ' + req.files.length + /* logging other variables */)
return res.status(200).send({name})
} catch (error) {
return res.status(500).send({
message: error.message
})
}
})
所以我说过jwt到期时,预期的响应必须是401 HTTP代码并重定向到登录路由,但我却得到ERR_CONNECTION_RESET
我应该怎么做才能得到这个结果。谢谢!