2017-10-15 5 views
0

J'essaie d'apprendre la pile MEAN et je suis confronté à un problème. J'ai développé une petite application Express. Mais celui-ci je ne pouvais pas comprendre. Je poste des données de formulaire en utilisant le service HTTP angulaire.req.body ne retourne pas les données soumises

code de service qui utilise la méthode post pour afficher des données.

createUser(user: User): Observable<User> { 
const submittedUser = JSON.stringify(user); 
console.log("submitted:", submittedUser); 
const headers = new Headers ({ 'Content-Type': 'application/x-www-form-urlencoded' }); 
const options = new RequestOptions({headers: headers}); 
return this.http.post('http://localhost:3000/user/create', submittedUser, options) 
    .map((response: Response) => {response.json()}) 
    .catch((error:Response) => Observable.throw(error.json())); 

}

côté serveur j'ai app.js et un fichier routeur.

'use strict'; 

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

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

var app = express(); 
mongoose.connect('mongodb://localhost/go-social'); 

app.set('views', path.join(__dirname, 'views')); 
app.set('view engine', 'hbs'); 

app.use(morgan('dev')); 
app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded({extended: true})); 

app.use(cookieParser()); 
app.use(express.static(path.join(__dirname, 'public'))); 

app.use(function(req, res, next) { 
    res.setHeader('Access-Control-Allow-Origin', '*'); 
    res.setHeader('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept'); 
    res.setHeader('Access-Control-Allow-Methods', 'POST, GET, PATCH, DELETE, OPTIONS'); 
    next(); 
}); 

app.use('/user', userRoutes); 

app.use(function(req, res, next) { 
    return res.render('error'); 
}); 

app.listen(3000, function() { 
    console.log("App listening on port 3000"); 
}) 

Ceci est un fichier de routeur. userRoutes.js

enter var express = require('express'); 
var router = express.Router(); 
var bcrypt = require('bcryptjs'); 
var jwt = require('jsonwebtoken'); 
var User = require('../models/user'); 
router.post('/create', function (req, res) { 

    console.log(req.body); 
    var user = new User({ 
     firstName: req.body.firstName, 
     lastName: req.body.lastName, 
     email: req.body.email, 
     password: req.body.password 
    }); 
    user.save(function(err, result) { 
     if(err) next(err); 
     res.status(201).json({ 
      message: "Your account has been created successfully", 
      obj: result 
     }); 
    }); 
}); 

Quand j'utilise Postman, cela fonctionne, mais il ne fonctionne pas avec le service Http. Je reçois req.body dans la console en tant qu'objet avec mon objet soumis.

{ '{"firstName":"Myname","lastName":"sadf","email":"[email protected]","password":"awe"}': '' } 

Répondre

2

changement

De

const headers = new Headers ({ 'Content-Type': 'application/x-www-form-urlencoded' }) 

Pour

const headers = new Headers ({ 'Content-Type': 'application/json' }) 
+0

Ouais je viens a résolu. Merci –

+0

cool! marquer si cela a aidé – Sajeetharan