2016-03-30 8 views
0

Ich bin neu bei Node.js und serverseitigen Skripten. Ich erstelle gerade eine Login-Seite mit Node.js als Server Side lang. Ich habe einige Benutzerdetails in JSON-Daten standardmäßig gespeichert.Fehler beim Bearbeiten von JSON-Daten in NodeJS

Ich möchte die JSON-Datei für die Authentifizierung lesen und auch für neue Benutzereinträge bearbeiten; also suche ich grundsätzlich nach Möglichkeiten, es zu tun. Hier ist ein Beispiel für die JSON-Datei:

Ich verwende Intellij als IDE mit NodeJS-Plugin installiert. Also habe ich versucht, Dateisystem zu verwenden JSON-Datei zuzugreifen, aber ich habe verschiedene Fehler, gemeinsam war:

Can't set headers after they are sent

Dies ist der Code, den ich versuchte:

var express = require('express'); 
var router = express.Router(); 
var fs = require('fs'); 

/* GET login page. */ 
router.get('/', function(req, res, next) { 
    res.render('login', { title: 'something' }); 

    // Asynchronous read 
    fs.readFile('user.json', function (err, data) { 
     if (err) { 
     return console.error(err); 
     } 
     console.log("Asynchronous read: " + data.toString()); 
    }); 
}); 

Gibt es Möglichkeiten, dies zu tun? Und warum habe ich diesen Fehler bekommen? Ich habe eine Weile in Google gesucht, konnte es aber nicht lösen. Eine ausführliche Antwort wird begrüßt.

+0

Bekommen Sie innerhalb des Fehlers wenn? – Haych

+0

yeah, ich habe eine Fehlermeldung bekommen – arvind

+0

versuchen, die res.render nach der readFile – Haych

Antwort

0

Der Fehler "Fehler: Kann Header nicht festlegen, nachdem sie gesendet werden." bedeutet, dass Ihre Antwort bereits im Body oder Finished ist, aber eine Funktion versucht, einen Header oder einen statusCode zu setzen, und das ist nicht erlaubt.

In diesem Fall rufen Sie res.render() auf. Dies führt dazu, dass Ihre Antwort abgeschlossen ist. Danach versuchen Sie, die Datei zu lesen, und Ihr Code löst einen Fehler aus. Da Sie immer noch in der Handler Funktion (req, res, next) sind, ist Express in der Lage, Ihren Fehler zu erfassen und versucht, einen Statuscode zu senden, aber da Ihre Antwort bereits fertig ist, erhalten Sie die "Kann" t Header setzen, nachdem sie gesendet wurden " Fehler.

Was ich meine, ist der Grund, warum Sie die Header Fehler hat nichts mit Header zu tun, es ist alles über fs-Modul und der ReadFile-Aufruf. Versuchen Sie also, den readFile-Fehler zu beheben, und Sie werden gleichzeitig den Header-Fehler beheben.

Hoffen, dass es

PD hilft: Ich nehme an, Ihre JSON-Datei nur zu Testzwecken, aber wenn Ihre Planung, dass JSON zu analysieren, nachdem Sie mit fs lesen, ich denke, das keine gültige JSON ist. Vielleicht könnten Sie einen Schlüssel "Benutzer" erstellen und alle Informationen in einem Array speichern.

0

Willkommen bei NodeJS!

Sie werden großartige Pakete finden, um mit Benutzerauthentifizierung und Sitzungs (Daten) -Management zu helfen, ich bin sicher, wie Passport (https://www.npmjs.com/package/passport).

Um Ihre Frage zu beantworten, sendet eine Antwort (Res) Daten an das Front-End, so dass Sie das letzte nicht zuerst tun möchten.

router.get('/', function(req, res) { 

    // Asynchronous read 
    fs.readFile('user.json', function (err, data) { 

    var logMessage = err ? err : "Asynchronous read: " + data.toString(); 

    res.render('login', { title: 'something' }); 

    }); 

}); 
Verwandte Themen