NodeJS和Multer-jwt到期后发生ERR_CONNECTION_RESET

时间:2019-04-18 16:10:28

标签: node.js express jwt multer

我正在使用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

我应该怎么做才能得到这个结果。谢谢!

0 个答案:

没有答案