【问题标题】:Error: Can't set headers after they are sent in node js MVC approach错误:在节点 js MVC 方法中发送标头后无法设置标头
【发布时间】:2017-08-18 16:49:27
【问题描述】:

我收到以下错误...

   events.js:160
     throw er; // Unhandled 'error' event
     ^
 Error: Can't set headers after they are sent.
      at ServerResponse.OutgoingMessage.setHeader (_http_outgoing.js:357:11)
      at ServerResponse.header 
      (C:\level3proj\node_modules\express\lib\response.js:730:10)

..当我执行以下代码时

    var mongoose = require('mongoose');
    var express = require('express');

    // express router used to define routes
    var userRouter= express.Router();

    var userModel = mongoose.model('User');
    var allUsers = [];
    var fs = require('fs');

    module.exports.controller = function(app) {
      userRouter.get('/all',function(req,res) {
        res.send("this is a route to get information on particular ");
        userModel.find({},function(err,allUsers) {
          if(err) {
            res.send(err);
          } else {
            res.send(allUsers);
          }
        }); // end user model
      }); // end get all users
      app.use('/users', userRouter);
    } // end controller code

当我加载时

http://localhost:3000/users/all

显示结果,同时在控制台中抛出错误。

为什么我在控制台上收到错误消息?

【问题讨论】:

    标签: node.js mongodb express


    【解决方案1】:

    您发送了 2 次响应。第一个在这里

     res.send("this is a route to get information on particular ");
    

    然后在这里

    if(err) {
        res.send(err);
    } else {
        res.send(allUsers);
    }
    

    删除第一次发送,您的回复将起作用

    【讨论】:

      【解决方案2】:

      你不能发送 http response 两次。

      您已经发送了:

      res.send("this is a route to get information on particular ");
      

      您不能再进行数据库查询并再次发送响应。

      【讨论】:

      • 如果我的 user.js 文件中有多个路由,那么发送响应两次或更多次的方法是什么
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-04-06
      • 1970-01-01
      • 1970-01-01
      • 2016-07-16
      • 1970-01-01
      • 1970-01-01
      • 2018-07-05
      相关资源
      最近更新 更多