Ich habe noch ein weiteres "kann Header nicht einstellen, nachdem sie gesendet werden." Problem. Ich habe einen Post-Router erstellt, der ein großes Objekt mit URLs empfängt, für das ich die Verarbeitung benötige.Header können nach dem Senden nicht festgelegt werden. Nodejs Express
Die Verarbeitung besteht aus dem Crawlen aller URLs, die das Objekt enthält. Ich habe einen Flaschenhals mit maximal 10 gleichzeitigen Crawls und einer Wartezeit von 800 Millisekunden gesetzt.
In jedem Fall ist es möglich, dass die Daten ankommen und protokollieren, aber wenn ich meine Funktion anrufe, die die Daten verarbeiten soll, löst meine Anwendung eine Ausnahme aus.
Beitrag Router
router.post('/crawledUrls', function (req, res, err) {
crawler = new crawlerClass();
var urlArray = JSON.parse(req.body);
crawler.crawlArrayUrls(urlArray);
res.send({message: "Array sent successfully!"});
});
crawler.crawlArrayUrls
crawlerClass.prototype.crawlArrayUrls = function (arrayObject) {
var itemsProcessed = 0;
var emptyUrlArray = [];
var newArray = [];
for(keys in arrayObject){
newArray.push(arrayObject[keys]);
}
var limiter = new Bottleneck(10, 800);
newArray.forEach(function (listItem, indexArray, err) {
limiter.submit(err, function() {
if(err) throw err;
request({
encoding: null,
method: "GET",
headers: {
'User-Agent': 'request'
},
uri: listItem
}, function (error, response, body, err) {
if(err) throw err;
$ = cheerio.load(body);
if($('div.alert.alert-danger').html() == undefined) {
console.log(listItem);
emptyUrlArray.push(listItem);
} else {
console.log("Else");
//Not done.
}
});
});
});
};
App.js
var express = require('express');
var session = require('express-session');
var path = require('path');
var favicon = require('serve-favicon');
var logger = require('morgan');
//var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var scheduleObject = require('./UtilityLogic/scheduleObject');
var scheduleBidding = require("./GoogleAPILogic/scheduleBidding");
var dbModules = require("./DBLogic/dbModules");
var routes = require('./routes/index');
var app = express();
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');
app.enable('trust proxy');
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(session({
secret: 'secret',
resave: false,
saveUninitialized: true,
cookie: {
httpOnly: true,
secure: true
}
}));
app.use(express.static(path.join(__dirname, 'public')));
app.use('/', routes);
// catch 404 and forward to error handler
app.use(function(req, res, next) {
var err = new Error('Not Found');
err.status = 404;
next(err);
});
// error handlers
// development error handler
// will print stacktrace
if (app.get('env') === 'development') {
app.use(function(err, req, res, next) {
res.status(err.status || 500);
res.render('error', {
message: err.message,
error: err
});
throw err;
});
}
// production error handler
// no stacktraces leaked to user
app.use(function(err, req, res, next) {
res.status(err.status || 500);
res.render('error', {
message: err.message,
error: {}
});
});
var scheduler = new scheduleObject();
var dbObject = new dbModules("./somePath");
var scheduleBidObject = new scheduleBidding("someKey");
//Test connection to DB
dbObject.testConnectionToDB();
scheduler.scheduleFunction('59 59 23 * * *',function(){
scheduleBidObject.getBiddingHeaders('/SomePath/');
});
scheduler.scheduleFunction('01 e 10 00 * * *',function(){
scheduleBidObject.getBiddingHeaders('/SomePath/');
});
module.exports = app;
Exception geworfen
Error: Can't set headers after they are sent.
www-2 at ServerResponse.OutgoingMessage.setHeader (http.js:691:11)
www-2 at ServerResponse.header (/somePath/node_modules/express/lib/response.js:719:10)
www-2 at ServerResponse.send (/somePath/node_modules/express/lib/response.js:164:12)
www-2 at done (/somePath/node_modules/express/lib/response.js:956:10)
www-2 at Object.exports.renderFile (/somePath/node_modules/jade/lib/index.js:374:12)
www-2 at View.exports.__express [as engine] (/somePath/node_modules/jade/lib/index.js:417:11)
www-2 at View.render (/somePath/node_modules/express/lib/view.js:126:8)
www-2 at tryRender (/somePath/node_modules/express/lib/application.js:639:10)
www-2 at EventEmitter.render (/somePath/node_modules/express/lib/application.js:591:3)
www-2 at ServerResponse.render (/somePath/node_modules/express/lib/response.js:960:7)
, was der Code ist für '// Do etwas mit dem Körper? – BlackMamba
Der Code wurde jetzt aktualisiert. Ich kümmere mich um bestimmte Elemente auf der gegebenen Webseite. – Thyregod
Mögliches Duplikat von [Node.js Fehler: Header können nach dem Senden nicht gesetzt werden] (http://stackoverflow.com/questions/7042340/node-js-error-cant-set-headers-after-they-are (ss) –