Mongoose 设置两次标头和/或未正确处理回调-导致错误[ERR\u HTTP\u headers\u SENT]

Mongoose 设置两次标头和/或未正确处理回调-导致错误[ERR\u HTTP\u headers\u SENT],mongoose,callback,http-headers,gridfs-stream,Mongoose,Callback,Http Headers,Gridfs Stream,我用这段代码获得了预期的图像,但它没有显示在我的pug模板中,而是显示在浏览器devtools控制台中(我希望这是有意义的),而且似乎我正在尝试设置两次标题。我的代码生成[ERR\u HTTP\u HEADERS\u SENT],如下所示 我已经阅读了许多关于这个问题的问题,包括这个问题的彻底分解: 我认为实际发生的是我没有正确处理回调,但我不确定 我真的很挣扎,需要一点帮助来指出我哪里出了问题 route.js: router.get('/issue/filedisplay/:id', is

我用这段代码获得了预期的图像,但它没有显示在我的pug模板中,而是显示在浏览器devtools控制台中(我希望这是有意义的),而且似乎我正在尝试设置两次标题。我的代码生成[ERR\u HTTP\u HEADERS\u SENT],如下所示

我已经阅读了许多关于这个问题的问题,包括这个问题的彻底分解:

我认为实际发生的是我没有正确处理回调,但我不确定

我真的很挣扎,需要一点帮助来指出我哪里出了问题

route.js:

router.get('/issue/filedisplay/:id', issue_controller.file_display);
controller.js:

// controller.js
    exports.file_display = function(req, res) {
      gfs.files.findOne(
        { _id: mongoose.Types.ObjectId(req.params.id) },
        (err, file) => {
          //res.contentType(file.contentType);
          // Check if file
          if (!file || file.length === 0) {
            return res.status(404).json({
              err: 'No file exists',
            });
          }
          const readstream = gfs.createReadStream(file._id);
          readstream.pipe(res);
          readstream.on('close', () => {
            res.render('filedisplay', {
              title: 'Display Image',
              file: file._id,
            });
          });
          //return res.json(file);
          //return res;
        }
      );
    };
帕格模板:

//-filedisplay.pug
extends layout

block content
  h1= title
    p Display Image
    div
      img.image(src="/list/issue/filedisplay/" + file alt="")
错误:

Error [ERR_HTTP_HEADERS_SENT]: Cannot set headers after they are sent to the client
    at ServerResponse.setHeader (_http_outgoing.js:482:11)
    at ServerResponse.header (/home/don/dev/sandbox/fileupload-ex/file-upload-gridfs/node_modules/express/lib/response.js:771:10)
    at ServerResponse.send (/home/don/dev/sandbox/fileupload-ex/file-upload-gridfs/node_modules/express/lib/response.js:170:12)
    at done (/home/don/dev/sandbox/fileupload-ex/file-upload-gridfs/node_modules/express/lib/response.js:1008:10)
    at Object.exports.renderFile (/home/don/dev/sandbox/fileupload-ex/file-upload-gridfs/node_modules/pug/lib/index.js:421:12)
    at View.exports.__express [as engine] (/home/don/dev/sandbox/fileupload-ex/file-upload-gridfs/node_modules/pug/lib/index.js:464:11)
    at View.render (/home/don/dev/sandbox/fileupload-ex/file-upload-gridfs/node_modules/express/lib/view.js:135:8)
    at tryRender (/home/don/dev/sandbox/fileupload-ex/file-upload-gridfs/node_modules/express/lib/application.js:640:10)
    at Function.render (/home/don/dev/sandbox/fileupload-ex/file-upload-gridfs/node_modules/express/lib/application.js:592:3)
    at ServerResponse.render (/home/don/dev/sandbox/fileupload-ex/file-upload-gridfs/node_modules/express/lib/response.js:1012:7)
    at /home/don/dev/sandbox/fileupload-ex/file-upload-gridfs/app.js:82:7
    at Layer.handle_error (/home/don/dev/sandbox/fileupload-ex/file-upload-gridfs/node_modules/express/lib/router/layer.js:71:5)
    at trim_prefix (/home/don/dev/sandbox/fileupload-ex/file-upload-gridfs/node_modules/express/lib/router/index.js:315:13)
    at /home/don/dev/sandbox/fileupload-ex/file-upload-gridfs/node_modules/express/lib/router/index.js:284:7
    at Function.process_params (/home/don/dev/sandbox/fileupload-ex/file-upload-gridfs/node_modules/express/lib/router/index.js:335:12)
    at next (/home/don/dev/sandbox/fileupload-ex/file-upload-gridfs/node_modules/express/lib/router/index.js:275:10)

这个问题已经结束。它没有被解析,代码仍然被破坏。在上述控制器代码中,我真正需要的是以下各项:

readstream.pipe(res);
这是因为我在引用链接中添加了target=“_blank”,导致渲染图像在新的浏览器窗口中打开,而这正是我真正想要的。因此,在新的pug模板中渲染图像是一个不必要的步骤,而导致问题的是在“on”方法中渲染代码