我有点新的节点和堆栈这个错误很长一段时间.请帮助我解决我的问题.这是我的代码:
app.get('/', function(req , res){
request(url, function(err, response, html){
if (!err && response.statusCode == 200){
var page = cheerio.load(html);
page('.search-result-description').each(function(){
var data = [];
var name = page(this).find('.search-result-item__head');
var company = page(this).find('.search-result-item__company');
var description = page(this).find('.search-result-item__snippet');
var requirements = page(this).find('.search-result-item__snippet');
var salary = page(this).find('.b-vacancy-list-salary');
data.push({
vac_name: name.eq(0).text(),
vac_description: description.eq(0).text(),
vac_requirements: requirements.eq(0).text(),
var_company: company.eq(0).text(),
vac_salary : salary.eq(0).text()
});
data = JSON.stringify(data, null, 4);
res.render('main.ejs', {data: data});
});
}
});
});
Run Code Online (Sandbox Code Playgroud)
发送http响应的res.render()方法只能在每个请求中调用一次(每个请求只有一个响应).当您多次调用它们时,您会收到有关已发送标头的错误消息.
假设你的page()函数是同步的,你只需要在循环结束后移动一些语句而不是循环内部,并将data变量的声明移到循环外部,这样你就可以用循环累积数据:
app.get('/', function(req, res) {
request(url, function(err, response, html) {
if (!err && response.statusCode == 200) {
var page = cheerio.load(html);
var data = [];
page('.search-result-description').each(function() {
var name = page(this).find('.search-result-item__head');
var company = page(this).find('.search-result-item__company');
var description = page(this).find('.search-result-item__snippet');
var requirements = page(this).find('.search-result-item__snippet');
var salary = page(this).find('.b-vacancy-list-salary');
data.push({
vac_name: name.eq(0).text(),
vac_description: description.eq(0).text(),
vac_requirements: requirements.eq(0).text(),
var_company: company.eq(0).text(),
vac_salary: salary.eq(0).text()
});
});
res.render('main.ejs', {
data: JSON.stringify(data, null, 4);
});
}
});
});
Run Code Online (Sandbox Code Playgroud)
如果request()操作返回错误,您还应该有一些错误处理.就目前而言,你永远不会回应这个请求.
在express中,方法render(),send(),json()可以调用一次响应客户端,第二次调用将发出错误:发送后不能设置头文件.从你的代码中,res.render()被多次调用,因为你在循环中调用它.最好在调用render()之前检查响应是否完成,或者重新调整逻辑以调用render()只有一个.
| 归档时间: |
|
| 查看次数: |
15199 次 |
| 最近记录: |