2017-01-03 1 views
1

Dans les requêtes POST via Postman dans une API NodeJS, je reçois des corps vides ... (Je reçois exactement ceci: {}), mais de tests automatisés cela fonctionne parfaitement. En fait de Postman qui se produit quand je l'envoie en "forme" ou en "raw" avec "text", mais si je l'envoie en "JSON" en raw il se fige simplement en "loading ..."
Je l'ai lu l'ajout de ces 2 lignes liées au corps parser fait fonctionner pour les tests, mais pas pour Postman:Corps vide dans les requêtes POST à ​​une API dans NodeJS de Postman (mais pas à partir de tests automatisés)

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

le code entier est ici: https://github.com/nemenosfe/TakeMe-Api mais les 3 fichiers clés sont les suivants (simplifié):

app.js:

const express = require('express'); 
const bodyParser = require('body-parser'); 
const app = express(); 
const cors = require('cors'); 
const user = require('./routes/users'); 

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

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

app.use(cors()); 

// catch 404 and forward to error handler 
app.use(function(req, res, next) { 
    var err = new Error('Not Found'); 
    err.status = 404; 
    next(err); 
}); 

// development error handler 
// will print stacktrace 
if (app.get('env') === 'development') { 
    app.use(function(err, req, res, next) { 
    res.status(err.status || 500); 
    }); 
} 

// production error handler 
// no stacktraces leaked to user 
app.use(function(err, req, res, next) { 
    res.status(err.status || 500); 
}); 

app.listen(8888, function() { 
    console.log("Node server running on http://localhost:8888"); 
}); 

module.exports = app; 

routes/utilisateurs:

"use strict" 
const express = require('express'), 
     router = express.Router(), 
     /* ... many require and other code probably not relevant for the problem ... */ 

router 
    .post('/', function(req, res, next) { 
    console.log(`conditions: ${(!req.body)} ${(!req.body.uid)} ${(!req.body.provider)} ${JSON.stringify(req.body)}`); 
    // This console.log appears as follows in the console once I make the request by Postman: false true true {} 
    // But it receives what it shoulds with automated tests 

    if (!req.body || !req.body.uid || !req.body.provider) { utilsErrors.handleNoParams(res); } 
     else { 
     /* ... There is a lot of code here but it's not relevant for the problem because it doesn't even reaches this point. */ 
    } 
    }) 

module.exports = router 

tests/utilisateurs:

"use strict" 
let request = require('supertest-as-promised'); 
const api = require('../app'); 
/* ... Another require not relevant for the problem ... */ 
request = request(api); 

describe('Users route', function() { 
    describe.only('POST /users', function() { 
    it("should create a new user when it doesn't exist", function(done) { 
     const params = { 
     'appkey': helperCommon.appkey, 
     'uid': 1, 
     'provider': 'providerTest', 
     'name': 'fakeName' 
     }; 
     request 
     .post('/users') 
     .set('Accept', 'application/json') 
     .send(params) 
     .expect(201) 
     .expect('Content-Type', /application\/json/) 
     .then((res) => { 
      expect(res.body).to.have.property('user'); 
      const userResponse = res.body.user; 
      expect(userResponse).to.have.property('uid', params.uid); 
      expect(userResponse).to.have.property('provider', params.provider); 
      expect(userResponse).to.have.property('name', params.name); 
      /* ... other expectectations that are not important for the problem ... */ 
      done(); 
     }, done) 
    }); 
    }); 

Merci!

Répondre

1

Assurez-vous que vous êtes l'envoi de la demande POST En tant que postier x-www-form-urlenconded