NodeJs 发送后无法设置headers
NodeJs Can't set headers after they are sent
在我的项目 nodejs returns 中出现以下消息:
错误:发送后无法设置headers。
我在这个网站上看过很多问题,但我仍然找不到解决方案。请帮助.!!!
那是我的代码:
routes.js
var mongodb = require(__dirname+"/db.js");
var fs = require("fs");
var hbs = require("express3-handlebars");
var soap = require('soap');
var url = "http://infovalutar.ro/curs.asmx?wsdl";
var index = null;
module.exports = {
home: function(req, res) {
mongodb.db().collection("categories").find({id: req.params.category}).toArray(function(err, data) {
for (j=0; j<data.length; j++) {
for(i=0; i<data[j].categories.length; i++) {
var link_path = data[j].categories[i].categories;
link_path.type = { data: req.params.categorie };
res.render("home", {
location: data[j].id,
title: data[j].page_title,
name: data[j].name,
description: data[j].page_description,
mens_link: "/mens",
womens_link: "/womens",
data_id: data[j].id,
type: req.params.categoriy,
cat: data[j].categories,
categories: data[j].categories[i].categories
});
}
}
});
},
product_list: function(req, res) {
mongodb.db().collection("products").find({primary_category_id: req.params.sub_category}).toArray(function(err, data) {
for (s=0; s<data.length; s++) {
for (v=0; v<data[s].image_groups.length; v++) {
res.render("product_list", {
products: data,
mens_link: "/mens",
womens_link: "/womens",
main: req.params.category,
sub: req.params.sub_category,
id: req.params.id,
});
}
}
});
},
single_product: function(req, res) {
mongodb.db().collection("products").find({id: req.params.id}).toArray(function(err, data) {
for (s=0; s<data.length; s++) {
for (v=0; v<data[s].image_groups.length; v++) {
res.render("product", {
single_product: data,
mens_link: "/mens",
womens_link: "/womens",
main: req.params.category,
sub: req.params.sub_category,
id: req.params.id,
});
}
}
});
}
};
不幸的是,它不能那样工作。您正在调用使渲染引擎发送指定布局数据并关闭连接的函数 render()
。这正是您收到 headers 已发送错误的原因。
函数 res.render()
每个请求只能调用一次。
创建数组 var response=[]
并像这样更改循环:
var response=[];
for (j=0; j<data.length; j++) {
for(i=0; i<data[j].categories.length; i++) {
var link_path = data[j].categories[i].categories;
link_path.type = { data: req.params.categorie };
response.push({
location: data[j].id,
title: data[j].page_title,
name: data[j].name,
description: data[j].page_description,
mens_link: "/mens",
womens_link: "/womens",
data_id: data[j].id,
type: req.params.categoriy,
cat: data[j].categories,
categories: data[j].categories[i].categories
});
}
}
res.render('home', response);
并在您的 for 循环中,将每个 to-be-rendered 项目推入该数组。
请注意,您将在 home
布局的响应中得到一个 objects 数组。
在我的项目 nodejs returns 中出现以下消息:
错误:发送后无法设置headers。 我在这个网站上看过很多问题,但我仍然找不到解决方案。请帮助.!!!
那是我的代码:
routes.js
var mongodb = require(__dirname+"/db.js");
var fs = require("fs");
var hbs = require("express3-handlebars");
var soap = require('soap');
var url = "http://infovalutar.ro/curs.asmx?wsdl";
var index = null;
module.exports = {
home: function(req, res) {
mongodb.db().collection("categories").find({id: req.params.category}).toArray(function(err, data) {
for (j=0; j<data.length; j++) {
for(i=0; i<data[j].categories.length; i++) {
var link_path = data[j].categories[i].categories;
link_path.type = { data: req.params.categorie };
res.render("home", {
location: data[j].id,
title: data[j].page_title,
name: data[j].name,
description: data[j].page_description,
mens_link: "/mens",
womens_link: "/womens",
data_id: data[j].id,
type: req.params.categoriy,
cat: data[j].categories,
categories: data[j].categories[i].categories
});
}
}
});
},
product_list: function(req, res) {
mongodb.db().collection("products").find({primary_category_id: req.params.sub_category}).toArray(function(err, data) {
for (s=0; s<data.length; s++) {
for (v=0; v<data[s].image_groups.length; v++) {
res.render("product_list", {
products: data,
mens_link: "/mens",
womens_link: "/womens",
main: req.params.category,
sub: req.params.sub_category,
id: req.params.id,
});
}
}
});
},
single_product: function(req, res) {
mongodb.db().collection("products").find({id: req.params.id}).toArray(function(err, data) {
for (s=0; s<data.length; s++) {
for (v=0; v<data[s].image_groups.length; v++) {
res.render("product", {
single_product: data,
mens_link: "/mens",
womens_link: "/womens",
main: req.params.category,
sub: req.params.sub_category,
id: req.params.id,
});
}
}
});
}
};
不幸的是,它不能那样工作。您正在调用使渲染引擎发送指定布局数据并关闭连接的函数 render()
。这正是您收到 headers 已发送错误的原因。
函数 res.render()
每个请求只能调用一次。
创建数组 var response=[]
并像这样更改循环:
var response=[];
for (j=0; j<data.length; j++) {
for(i=0; i<data[j].categories.length; i++) {
var link_path = data[j].categories[i].categories;
link_path.type = { data: req.params.categorie };
response.push({
location: data[j].id,
title: data[j].page_title,
name: data[j].name,
description: data[j].page_description,
mens_link: "/mens",
womens_link: "/womens",
data_id: data[j].id,
type: req.params.categoriy,
cat: data[j].categories,
categories: data[j].categories[i].categories
});
}
}
res.render('home', response);
并在您的 for 循环中,将每个 to-be-rendered 项目推入该数组。
请注意,您将在 home
布局的响应中得到一个 objects 数组。