2016-01-13 11 views
5

Ich habe ein Problem mit dem Empfang von JSON von http.post. Lassen Sie uns klar, etwas machen: Dies ist meine Komponentendatei:Angular2 http.post und undefined req.body

import {Component} from 'angular2/core' 
import {Http, HTTP_PROVIDERS, Headers} from 'angular2/http' 

@Component({ 
    selector: 'login-form', 
    template: ` 
    <form (ngSubmit)="onSubmit()"> 

     <button type="submit">Wyslij</button> 
    </form> 
    ` 
}) 

export class LoginFormComponent { 
    constructor(public http: Http) { } 

    onSubmit() { 
    var headers = new Headers(); 
    headers.append('Content-Type', 'application/x-www-form-urlencoded'); 

    var data = JSON.stringify({ 
     login: "zupa", 
    }); 

    this.http.post('http://localhost:8080/send', data, {headers: headers}) 
    .subscribe(); 
    } 
} 

Meine server.js Datei

var express = require('express'); 
var path = require('path'); 
var favicon = require('serve-favicon'); 
var logger = require('morgan'); 
var cookieParser = require('cookie-parser'); 
var bodyParser = require('body-parser'); 

var routes = require('./routes/index'); 

var app = express(); 

// view engine setup 
app.set('views', path.join(__dirname, 'views')); 
app.use(express.static(path.join(__dirname, 'node_modules'))); 
app.use(express.static(path.join(__dirname))); 
app.set('view engine', 'ejs'); 
app.engine('html', require('ejs').renderFile); 

// uncomment after placing your favicon in /public 
//app.use(favicon(path.join(__dirname, 'public', 'favicon.ico'))); 
app.use(logger('dev')); 
app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded({ extended: false })); 
app.use(cookieParser()); 
app.use(express.static(path.join(__dirname, 'public'))); 

app.use('/', routes); 

app.get('*', function(req, res, next) { 
    res.render("index.html", {title: 'Aplikacja'}); 
}); 

app.listen(8080, function() { 
    console.log("Starting at localhost:8080"); 
}); 

module.exports = app; 

Wie Sie sehen können, ist dies ein Standard, der von Express-Modul-Server-Datei erzeugt.

Dies ist der Inhalt meiner "Routen" -Datei.

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

/* GET home page. */ 
router.get('/', function(req, res, next) { 
    res.render('index.html', {title: 'Infam'}); 
}); 

router.post('/send', function(req, res, next) { 
    console.log("Received data: " + req.body.login); 
}); 

module.exports = router; 

Der Server liefert eine Nachricht an mich: „Empfangene Daten: undefined“ und ich habe keine Ahnung, warum die req.body.login nicht definiert ist. Kannst du mir helfen? Vielen Dank im Voraus.

PS: Das gleiche ist, wenn ich

verwenden
"login": "zupa" 

statt

login: "zupa" 
+1

Was bekommen Sie, wenn Sie nur req.body auf der Serverseite abmelden. – inoabrian

+1

posten Sie bitte den Inhalt von 'req' –

+0

Hey, in diesem Fall habe ich '[Objekt Objekt]'. Wenn ich 'console.log (" Empfangene Daten: "JSON.stringify (req.body)) verwende, habe ich' {"{\" login \ ": \" zupa \ "}": ""} so, wie es aussieht als wäre etwas mit dem Parsen nicht in Ordnung. – elzoy

Antwort

5

Sie die entsprechenden Header gesetzt sollte, da Sie JSON verwenden.

headers.append('Content-Type', 'application/json'); 
+0

Exacly! Ich benutzte diesen Header-Typ in meiner jQuery, aber hier habe ich festgelegt, was in vielen Tutorials eingegeben wurde, wo sie auch JSON-Dateien sendeten (also war ich ein wenig verwirrt). Übrigens, manchmal vergesse ich, mein eigenes Gehirn zu benutzen: P Danke! – elzoy

0

Überprüfen Sie die akzeptierte Antwort hier Angular2 - set headers for every request

Es enthält einen benutzerdefinierten HTTP-Client Ihre Anfragen zu verarbeiten, so dass Sie auf die Überschriften für jede einzelne Anforderung nicht schreiben müssen Sie machen.

Verwandte Themen