Node.js:http.js:691 抛出新错误('发送后无法设置标头。')

2024-03-05

您好,我正在使用 MEAN 堆栈制作简单的应用程序。我收到此错误 http.js:691 throw new Error('发送后无法设置标头。')

这是代码: 服务器.js

// set up
var express = require('express');
var app = express();
var mongoose = require('mongoose');

// mongodb connection and app configuration
mongoose.connect('mongodb://localhost/test');

app.configure(function () {
    app.use(express.static(__dirname + '/app'));
    app.use(express.logger('dev'));
    app.use(express.bodyParser());
    app.use(express.methodOverride());
});

// define model
var Employee = mongoose.model('Employee', {
    firstName : String,
    lastName : String,
    photoUrl : String
});

// routes ==========================
// api
// GET
app.get('/api/employees', function(req, res) {
    console.log("GET");
    Employee.find(function(err, employees) {
        if(err) {
            res.send(err);
        }

        res.json(employees);
    });
});

// Get by ID
app.get('/api/employees/:employeeId', function(req, res) {
    Employee.findById(req.params.employeeId, function(err, employee) {
        if(err) {
            res.send(err);
        }

        res.json(employee);
    });
    Employee.find(function(err, employees) {
        if(err) {
            res.send(err);
        }

        res.json(employees);
    });
});

// POST
app.post('/api/employees', function(req, res) {
    Employee.create({
        firstName : req.body.firstName,
        lastName : req.body.lastName,
        photoUrl : req.body.photoUrl
    }, function(err, employee) {
        if(err) {
            res.send(err);
        }
        Employee.find(function(err, employees){
            if(err) {
                res.send(err);
            }
            res.json(employees);
        });
    });
});

// DELETE
app.delete('/api/employees/:employee_id', function(req, res) {
    Employee.remove({_id : req.params.employee_id}, function (err, employee) {
        if(err) {
            res.send(err);
        }

        Employee.find(function(err, employees) {
            if(err) {
                res.send(err);
            }
            res.json(employees);
        })
    });
});

// application
app.get('*', function(req, res) {
    res.sendfile('./app/index.html'); 
});

// start listening (start app)
app.listen(8080);
console.log("App listening on port 8080");

并且: app.js 角度路线

var employeesApp = angular.module('employeesApp', [
    'ngRoute',
    'EmployeesControllers',
    'employeeAppAnimations'
]);

employeesApp.config(['$routeProvider',
    function($routeProvider) {
        $routeProvider.
            when('/employees', {
                templateUrl: 'partials/employees_list.html',
                controller: 'EmployeesCtrl'
            }).
            when('/employees/:employeeId', {
                templateUrl: 'partials/employees_details.html',
                controller: 'EmployeeDetailsCtrl'
            }).
            otherwise({
                redirectTo: '/employees'
            });
    }]);

In

app.get('/api/employees/:employeeId', function() {...});

您使用了 res.json 两次。假设 Employee.findById 首先返回结果。然后,

res.json(employee)

已发送。然后代码稍有延迟地进入 Employee.find 回调。这再次触发 res.json()。但由于对您的请求的响应已经发送,因此它无法对同一请求发送另一个响应。

这种情况会引发错误。

有两种方法可以解决这个问题。

  1. 嵌套回调 - 在 Employee.findById 回调中调用 Employee.find。
  2. 在两个回调中添加条件以检查其他回调是否完成。然后发送单个响应。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Node.js:http.js:691 抛出新错误('发送后无法设置标头。') 的相关文章

随机推荐

  • 如何检查嵌入资源是否存在?

    在 Delphi 中 我正在构建一个 HTTP 应用程序 或者更确切地说是一个 Web 服务器 它本质上是一个内置于单个 EXE 文件中的整个网站 我嵌入的文件包括 HTML JS CSS SWF PNG XML 等 资源名称与原始文件名相
  • Drools-如何找出所有规则都匹配了?

    我有一个 DRL 文件 其中有 10 条规则 一旦我插入一个事实 一些规则可能会被匹配 我如何找出以编程方式匹配的规则 请注意 此答案对于 Drools 5 x 及以下版本有效 如果您已转到 6 或更高版本 请查看 melchoir55 修
  • 在 Dispatchertimer.Tick 事件中发送额外参数

    我的问题是如何在 Dispatchertimer Tick 事件中发送一些参数 这是代码 我想要的是在dispatcheTimer Tick处接收一个整数值 dispatcherTimer Tick new EventHandler dis
  • SQLITE_TRANSIENT 在 Swift 中未定义

    我正在使用 xcode 6 并且我已经导入libsqlite3 dylib and libsqlite3 0 dylib 我还添加了Bridging Header h文件女巫导入 sqlite3 h 我可以打开 SQLite 数据库并执行简
  • PHP:根据固定基准日期获取下一个日期

    PHP 有没有办法使用给定日期的 4 周间隔获取下一个日期 Example 我的开始日期是 2014 年 1 月 3 日星期五 我的间隔是从该日期起每 4 周一次 我正在寻找的是当前日期中与此 4 周间隔相匹配的下一个日期 或多个日期 如果
  • Google Maps API 和标记之间的自定义折线路线

    我想为 Android 应用程序创建一个自定义路由 我不确定应该使用哪个 API 以及它是否与 Java 兼容 据我所知 我需要使用航点来制定路线 我不需要知道两点之间的距离 只需制定路线 目标是从地图一侧的菜单中选择一个选项 并显示两个标
  • 多层架构中,是否可以跳过业务层进行增删改查操作?

    我们有 3 层应用程序 其中来自服务层的每个调用都进入业务层并由数据层保存 每层组件只能调用下面的层 然而 由于我们有数百个实体 并且有很多与 CRUD 操作相关的服务 因此我们的团队引发了很多争议 有些人认为 为了维护和易于开发 最好从
  • 设备部署是否足以模拟应用程序更新?

    通过应用程序商店 由 lambda 用户在设备上 进行的应用程序更新过程没有很好的记录 我将所有这些总结为以下问题 当用户更新他的应用程序时会发生什么 是所有内容都被删除 还是只是应用程序的某些部分 那么什么是保留的 什么是不保留的 如何在
  • 大规模互联网应用,从何入手?

    我正在从事的工作 我认为有关大规模应用程序 大规模网络的知识会对我有很大帮助 你认为我应该采取什么 我的意思是要读的书 要参加的课程 等等 预先感谢您的任何建议 PS 也许我的意思是应用程序不够大 D 一种适用于 gt 10 万用户的社交网
  • 如何在 spring 中配置自动装配

    如何在 spring 中配置自动装配 将上下文架构添加到配置 XML 并使用 Autowired 注释 http static springsource org spring docs 2 5 x reference beans html
  • vi 加密:使用了什么算法?

    我多年来一直使用加密文件来存储我的密码 它已使用加密vi xSun Solaris 10 上的命令 我现在尝试使用以下命令在 Linux 机器上打开该文件vi x and vi x cm blowfish 可悲的是 该文件完全混乱了 我的猜
  • C++ getline 使用逗号作为分隔符的多个变量类型

    我正在尝试做一个家庭作业 需要将 txt 文件中的数据读入变量中 该文件的每一行都有 姓氏 姓名缩写 号码 号码 我已经使用以下代码使 get 线部分工作 ifstream inputFile Students txt string lin
  • laravel 使用 php artisan 时从自定义存根创建模型

    当我使用php artisan make model CustomNamespace TestModel 我得到一个基于默认存根的模型 如下所示 namespace App Models CustomNamespace use Illumi
  • 在WKWebView中使用自定义字体

    我在我的应用程序中使用自定义字体 它们被复制到捆绑包并硬编码到 appName info plist 这种字体在整个应用程序和 UIWebView 中完美运行 我正在加载 htmlString webView loadHTMLString
  • 为什么模板类型参数不被推断为“const”? [复制]

    这个问题在这里已经有答案了 可能的重复 从右值参数推导对 const 的引用 https stackoverflow com questions 6075093 deducing references to const from rvalu
  • 如何以编程方式设置我的 IP 地址?

    如何以编程方式设置我的 IP 地址 我的应用程序正在检查它 使用代码德尔福技巧 http www delphitricks com source code internet get your own ip address html 虽然我不
  • 在 Jquery Mobile 或 PhoneGap 中禁用自动旋转

    虽然移动设备的跨平台开发这么好 没有一个简单的选项可以禁用自动旋转或锁定到一个方向 即纵向或横向 Jquery Mobile PhoneGap XUI 中是否有任何地方 如果是的话请帮忙 这让我发疯 来完成上面的回答 在 iPhone 上
  • Spring security默认配置总是抛出401

    我正在使用一些基本服务和实体创建一个新的 Spring REST 应用程序 我添加了 Spring Security 并且没有覆盖任何类 我只是向 application properties 添加了用户和密码 到目前为止一切顺利 我打开
  • 使用 HttpURLConnection 将调用正文添加到 POST

    我正在尝试使用 HTTPURLConnection 对服务器 api 进行 POST 方法调用 我的通话正文的 JSON 版本是 grant type password username email protected cdn cgi l
  • Node.js:http.js:691 抛出新错误('发送后无法设置标头。')

    您好 我正在使用 MEAN 堆栈制作简单的应用程序 我收到此错误 http js 691 throw new Error 发送后无法设置标头 这是代码 服务器 js set up var express require express va