![](/img/trans.png)
[英]node.js app: throw new Error('Can\'t set headers after they are sent.')
[英]Node.js: http.js:691 throw new Error('Can\'t set headers after they are sent.')
您好我正在使用MEAN堆棧進行簡單的應用程序。 我得到這個錯誤http.js:691拋出新的錯誤('不能在發送后設置標題。')
這是代碼:server.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 Angular路線
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'
});
}]);
在
app.get('/api/employees/:employeeId', function() {...});
你正在使用res.json兩次。 讓我們假設Employee.findById首先返回結果。 然后,
res.json(employee)
已發送。 然后代碼稍微延遲進入Employee.find回調。 這再次觸發res.json()。 但由於已經發送了對您的請求的響應,因此它無法向同一請求發送另一個響應。
這種情況引發了錯誤。
有兩種方法可以解決這個問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.