当主页加载时,会调用/
,同时也会对/courses
进行AJAX调用。
来自/courses
的 JSON 响应正在/
调用返回的 HTML 中使用。
但是在此实现中出现如下所示的错误
Error:Cannot set headers after they are sent
。
我想这是因为同时调用/
和AJAX调用/courses
。
如果错误是由我的想法引起的,那么解决方法是什么?
如果需要更多代码,请询问
必要的代码如下所示:
NodeJS代码段
var express = require('express');
var router = express.Router();
var db1 = require('../models/courseDetails.js');
/* GET home page. */
router.get('/', function(req, res, next) {
res.sendFile('index.html');
});
router.get('/courses',function(req,res){
db1.find({},function(err,data){
if(err){
console.log("I am in trouble from NODEJS")
}else{
console.log("coming back with the DATA for all courses:");
console.log(data[0]);
console.log("Have complete data...................................");
res.json(data);
}
})
res.json(data)
});
module.exports = router;
FACTORY代码段(正在启动AJAX调用)
.factory('courses',function($http){
return{
list:function(callback){
$http({
method:'GET',
url:'/courses'
})
.success(callback)
.error(function(error){
console.log('I am in error of AJAX,allCourses')
})
}
})
答案 0 :(得分:0)
您收到的错误是在响应完成后代码在响应对象上设置标头时发生的Express错误。在您的情况下,您正在调用res.json()
来设置Content-Type
标头,并且您在/courses
端点中调用了两次。这是在if/else
阻止之后发生的,您再次致电res.json()
。
将您的代码重构为以下内容:
router.get('/courses',function(req,res){
db1.find({},function(err,data){
if(err){
console.log("I am in trouble from NODEJS")
res.status(500).json({
message : 'Error getting courses'
});
} else {
console.log("coming back with the DATA for all courses:");
console.log(data[0]);
console.log("Have complete data...................................");
res.status(200).json(data);
}
});
});
如果数据库查询带有500状态代码,则会添加一些错误处理,如果数据库查询成功,则会添加200 OK以及所有json数据。