[英]node.js error - Can't sent headers after they are sent
我將ebay-api用於node.js,當出於某種原因刷新頁面時,控制台出現錯誤:
發送標頭后無法發送標頭
這是我的代碼,有人可以幫助我了解為什么刷新頁面時出現錯誤嗎?
// example simple request to FindingService:findItemsByKeywords
var ebay = require('../index.js');
var http = require('http');
var express = require('express');
var app = express();
var io = require('socket.io');
app.set('port', process.env.PORT || 5000);
app.get('/getEbay', function (req, res) {
console.log('inside get');
// for avoiding crossbrowser-error
res.header('Access-Control-Allow-Origin', '*');
res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE');
res.header('Access-Control-Allow-Headers', 'Content-Type, Authorization');
res.header('Content-Type', 'application/json');
var params = {};
params.keywords = ["cat"];
params['paginationInput.entriesPerPage'] = 10;
ebay.ebayApiGetRequest({
serviceName: 'FindingService',
opType: 'findItemsByKeywords',
appId: 'MYAPPID', // FILL IN YOUR OWN APP KEY, GET ONE HERE: https://publisher.ebaypartnernetwork.com/PublisherToolsAPI
params: params,
// filters: filters,
parser: ebay.parseItemsFromResponse // (default)
},
// gets all the items together in a merged array
function ebayApiGetRequest(error, items) {
if (error) throw error;
console.log('Found', items.length, 'items');
// res.send(items);
console.log(JSON.stringify(items));
res.contentType('application/json');
res.send(JSON.stringify(items));
// }
}
);
});
http.createServer(app).listen(app.get('port'), function(){
console.log('Express server listening on port ' + app.get('port'));
});
console.log('Listening on port 5000...');
我認為我的錯誤可能是在調用函數的順序上出現的,還是有辦法避免這種錯誤的調用?
代替這個:
res.send(JSON.stringify(items));
res.send(items);
嘗試:
res.end(JSON.stringify(items));
function ebayApiGetRequest(error, items) {
if (error) throw error;
console.log('Found', items.length, 'items');
// res.send(items);
console.log(JSON.stringify(items));
res.contentType('application/json');
res.send(JSON.stringify(items));// you send here
res.send(items);//and you send again right afterwards?
// }
}
如果您實際執行兩次發送,那么您當然要兩次發送數據。 這些res.send()
就足夠了。
好家伙,我們找出了問題!
這是正在運行的新代碼:
// example simple request to FindingService:findItemsByKeywords
var http = require('http');
var express = require('express');
var app = express();
var io = require('socket.io');
var ebay = require('../index.js');
app.set('port', process.env.PORT || 5000);
app.get('/getEbay', function(req, res) {
console.log('inside get');
// for avoiding crossbrowser-error
res.header('Access-Control-Allow-Origin', '*');
res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE');
res.header('Access-Control-Allow-Headers', 'Content-Type, Authorization');
res.header('Content-Type', 'application/json');
getEbaybyResults(function(error, items) {
if (error) throw error;
console.log('Found', items.length, 'items');
// res.send(items);
console.log(JSON.stringify(items));
// res.contentType('application/json');
// console.log(try);
// res.send(JSON.stringify(items));
res.end(JSON.stringify(items));
});
});
function getEbaybyResults(callback) {
var params = {};
params.keywords = ["cat"];
params['paginationInput.entriesPerPage'] = 10;
ebay.ebayApiGetRequest(
{
serviceName: 'FindingService',
opType: 'findItemsByKeywords',
appId: 'MYAPPID', // FILL IN YOUR OWN APP KEY, GET ONE HERE: https://publisher.ebaypartnernetwork.com/PublisherToolsAPI
params: params,
// filters: filters,
parser: ebay.parseItemsFromResponse // (default)
},
function(error, items) {
callback(error, items);
}
);
//ebayApiGetRequest();
}
http.createServer(app).listen(app.get('port'), function(){
console.log('Express server listening on port ' + app.get('port'));
});
//console.log('Listening on port 5000...');
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.