2016-01-13 20 views
5

Ho un problema con la ricezione di json da http.post. Facciamo in chiaro un po ': Questo è il mio file del componente:Angular2 http.post e non specificato 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(); 
    } 
} 

Il mio file server.js

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; 

Come si può vedere, si tratta di uno standard generato dal file server modulo espresso.

Questo è il contenuto del mio file "percorsi".

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; 

il server restituisce un messaggio a me: "I dati ricevuti: definito" e non ho idea del perché il req.body.login non è definito. Mi potete aiutare? Grazie in anticipo.

PS: Lo stesso è quando uso

"login": "zupa" 

invece di

login: "zupa" 
+1

cosa si ottiene quando si disconnette solo req.body sul lato server. – inoabrian

+1

si prega di inviare il contenuto di 'req' –

+0

Ehi, in tal caso ho '[oggetto oggetto]'. Quando uso 'console.log (" Dati ricevuti: "JSON.stringify (req.body))" ho '{" {\ "login \": \ "zupa \"} ":" "}' così sembra come se ci fosse qualcosa di sbagliato nell'analisi. – elzoy

risposta

5

È necessario impostare le intestazioni appropriate dal momento che si sta utilizzando JSON.

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

Esattamente! Stavo usando questo tipo di intestazioni nel mio jQuery, ma qui ho impostato ciò che è stato digitato in un sacco di tutorial in cui stavano anche inviando file JSON (quindi ero un po 'confuso). A proposito, a volte dimentico di usare il mio cervello: P Grazie! – elzoy

0

Controllare la risposta accettata qui Angular2 - set headers for every request

Esso include un client personalizzato http per elaborare le richieste in modo da non dover scrivere le intestazioni per ogni singola richiesta che fate.

Problemi correlati