In meiner app, ich sende einen Beitrag Anfrage an den Server mit Daten, die eine CSV-Datei mit:Kann nicht Express verwenden, um Daten zu senden zurück mehr an den Client als einmal
$.ajax({
type:"POST",
contentType: "application/json",
url:"/",
data: JSON.stringify({fileData:My_CSV_FILE}),
success: function(csvJson) {
console.log('in the done block!');
//can use csvJson in this handler
});
});
Anmerkung: Ich bin Entsendung zu die Heimroute, und ich bin in der Lage, eine Antwort mit den vom Server konvertierten Daten zu bekommen. Das Problem ist, dass ich, wenn ich auf localhost oder Heroku laufe, die POST-Anfrage nur einmal auslösen kann, dann muss ich den Server neu starten (auch wenn ich die Seite aktualisiere). Also ich kenne das Problem mit meiner Route irgendwo ist:
aktualisierenden FULL SERVER-Datei enthalten:
'use strict';
const express = require('express');
const csvtojson = require('csvtojson');
const PORT = process.env.PORT || 3000;
const bodyParser = require('body-parser');
const Converter = require('csvtojson').Converter;
var converter = new Converter({});
let app = express();
app.use(bodyParser.json({limit: '300kb'}));
app.use(express.static(__dirname +'/public'));
app.post('/',function(req,res) {
var csvFile = (req.body.fileData);
converter.fromString(csvFile, function(err, result) {
if(!err) {
console.log(result);
res.json(result);
}else {
res.json({error: 'Could not convert'});
}
})
});
app.listen(PORT,() => {
console.log(`app listening on port ${PORT}`);
});
Ich verwende Express 4. Auch hier alles funktioniert, aber nur einmal. Wenn ich Heroku Protokolle laufen oder auf der Konsole auf localhost ich:
Error: Can't set headers after they are sent.
Aber ich verstehe nicht, wie ich sie wieder einstellen. Wenn auf localhost laufen will, hier ist ein Link zu den Projekten Github: https://github.com/qctimes/calendar_export
Es gibt wahrscheinlich mehr Code, den Sie uns nicht angezeigt wird, zum Beispiel, wo die csvtojson Middleware enthalten? Irgendwie senden Sie Header, nachdem Sie mit dem Rendern begonnen haben. – adeneo
@adeneo Ich aktualisierte den Inhalt, um die vollständige Datei und den Link zum Projekt zu enthalten – Michael
Ich kann wirklich keine Fehler erkennen? Der Fehler ist ein Klassiker, und wie oben erwähnt, bedeutet das, dass Sie versuchen, Header nach dem Senden festzulegen, und Sie haben damit begonnen, Inhalte auszugeben. Kann es sein, dass der 'fromString'-Callback mehrmals oder so ähnlich läuft? Ersetzen Sie einfach 'res.json()' durch 'res.send()' und sehen Sie, was passiert – adeneo