Javascript Nodejs:在使用所有请求数据之前发送响应时出错

Javascript Nodejs:在使用所有请求数据之前发送响应时出错,javascript,node.js,express,heroku,multer,Javascript,Node.js,Express,Heroku,Multer,我使用multer来存储文件。为此,我有一个带有身份验证中间件的POST路由。 它接收的请求是多部分/表单数据(文件和其他文本字段) 这是auth中间件 function(req, res, next) { const token = req.header("x-auth-token"); if (!token) return res.status(401).send("Access denied. No token provided"); try { const dec

我使用multer来存储文件。为此,我有一个带有身份验证中间件的POST路由。 它接收的请求是多部分/表单数据(文件和其他文本字段)

这是auth中间件

function(req, res, next) {
  const token = req.header("x-auth-token");

  if (!token) return res.status(401).send("Access denied. No token provided");

  try {
    const decoded = jwt.verify(token, config.get("privateKey"));
    req.user = decoded;
    next();
  } catch (err) {
    res.status(400).send("Invalid token");
  }
};
现在的问题是,在没有有效令牌头(x-auth-token)的情况下调用此路由会导致Heroku上出现H18“服务器请求中断”错误响应(在本地机器上工作正常!)

另一方面,如果我从multipart/form数据请求中删除该文件,所有这些都可以正常工作

产生此错误的原因是(在我看来),请求太大,并且在使用所有请求之前发送了响应

所以现在,作为一种临时解决方法,我删除了auth中间件&我将身份验证代码放在fileFilter(validateRequest)函数中,以便在发送任何响应之前完全处理所有传入流

错误消失了,但现在validateRequest函数发出了气味

有没有一种方法可以像以前一样使用auth中间件,并且只在那里执行所有与身份验证相关的事情


将该问题描述为没有修复的旧nodejs错误

你能为你的post路由添加所有的代码吗?根据文档,上传作为一个中间件,你能试试router.post(“…”,auth,upload,(req,res,next)=>{…}如果您想像以前那样捕获错误,您可能必须等待上载,因为错误处理是异步的,否则请求将在expextedI出现相同问题时终止
function(req, res, next) {
  const token = req.header("x-auth-token");

  if (!token) return res.status(401).send("Access denied. No token provided");

  try {
    const decoded = jwt.verify(token, config.get("privateKey"));
    req.user = decoded;
    next();
  } catch (err) {
    res.status(400).send("Invalid token");
  }
};