2016-01-13 4 views
5

У меня проблема с получением json из http.post. Давайте сделаем это ясно немного: Это мой компонент файла:Angular2 http.post и 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(); 
    } 
} 

Мой 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; 

Как вы можете видеть, это обычно генерируется экспресс-файл модуля сервера.

Это содержание моего файла маршрутов.

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; 

Сервер возвращает мне сообщение: «Received данные: неопределенную», и я понятия не имею, почему req.body.login не определено. Вы можете мне помочь? Заранее спасибо.

PS: То же самое, когда я использую

"login": "zupa" 

вместо

login: "zupa" 
+1

Что вы получаете, когда вы выходите из системы только на стороне req.body на стороне сервера. – inoabrian

+1

, пожалуйста, напишите содержимое 'req' –

+0

Эй, в этом случае у меня есть [object object] '. Когда я использую 'console.log (« Полученные данные: «JSON.stringify (req.body))' i have '{" {\ "login \": \ "zupa \"} ":" "}', поэтому он выглядит например, что-то не так с синтаксическим разбором. – elzoy

ответ

5

Вы должны установить соответствующие заголовки, так как вы используете JSON.

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

Превосходно! Я использовал этот тип заголовков в своем jquery, но здесь я задал то, что было напечатано во многих учебниках, где они также отправляли json-файлы (так что я немного смутился). Кстати, иногда я забываю использовать свой собственный мозг: P Спасибо! – elzoy

0

Проверить принятый ответ здесь Angular2 - set headers for every request

Она включает в себя клиент НТТР для обработки ваших запросов, так что вам не нужно писать заголовки для каждого запроса вы делаете.

Смежные вопросы