Здравствуйте, вываливается ошибка при попытке формирования запроса к vk api и выдаче текстового файла на скачивание. Как видно рендерится файл прямо из функции получения данных, что конечно неправильно с точки зрения организации кода, но на тот момент только так придумал. Важная ремарка - ошибка возникает при повторному обращению по url
index.js
...
var vk = require('./lib/vk.js');
...
app.get('/vk', function(req, res) {
if(req.query.action === 'getwall') {
vk.getMessages('wall.get', {'owner_id' : req.query.id},res);
} else {
res.render('home', {view:'vk'});
}
});
...
vk.js
exports.getMessages = function (req, params, res) {
vk.setSecureRequests(true);
vk.request(req, params);
vk.on('done:wall.get', function (_o) {
if(_o) {
res.set({"Content-Disposition":"attachment; filename=\"backup.txt\""});
res.send(JSON.stringify(_o, null, 4));
//res.render('home', {vk: JSON.stringify(_o, null, 4)});
}
});
};
Вывод лога
5|index | Error: Can't set headers after they are sent.
5|index | at ServerResponse.setHeader (_http_outgoing.js:358:11)
5|index | at ServerResponse.header (/../vk/node _modules/express/lib/response.js:719:10)
5|index | at ServerResponse.header (../vk/node _modules/express/lib/response.js:722:12)
5|index | at VK.<anonymous> (/.../vk/lib/vk.js:1 5:6)
5|index | at emitOne (events.js:101:20)
5|index | at VK.emit (events.js:188:7)
5|index | at IncomingMessage.<anonymous> (/.../v k/node_modules/vksdk/sdk.js:307:31)
5|index | at emitNone (events.js:91:20)
5|index | at IncomingMessage.emit (events.js:185:7)
5|index | at endReadableNT (_stream_readable.js:974:12)
Модифицировал код, ошибка продолжается - важная ремарка, при повторному обращению к сайту.
index.js
app.get('/getwall/:action?/:id?',vk.getWall, function(req, res) {
res.render('home', {view:'vk'});
});
vk.js
exports.getWall = function (req, res, next) {
if(req.query.id)
vk.setSecureRequests(true);
vk.request('wall.get',{'owner_id' : req.query.id});
vk.on('done:wall.get', function (_o) {
console.log(req.query.id);
if(_o) {
req.wall = {vk: JSON.stringify(_o, null, 4)};
next();
}
});
};