nik*_*oco 3 node.js express angularjs mean-stack
您好我正在使用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");
Run Code Online (Sandbox Code Playgroud)
还有: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'
});
}]);
Run Code Online (Sandbox Code Playgroud)
小智 8
在
app.get('/api/employees/:employeeId', function() {...});
Run Code Online (Sandbox Code Playgroud)
你正在使用res.json两次.让我们假设Employee.findById首先返回结果.然后,
res.json(employee)
Run Code Online (Sandbox Code Playgroud)
已发送.然后代码稍微延迟进入Employee.find回调.这再次触发res.json().但由于已经发送了对您的请求的响应,因此它无法向同一请求发送另一个响应.
这种情况引发了错误.
有两种方法可以解决这个问题.
| 归档时间: |
|
| 查看次数: |
5082 次 |
| 最近记录: |