J'essaie de faire une demande à mon serveur JS de nœud qui accepte l'appel post/put. Les paramètres que j'essaie d'envoyer avec post-appel via chai ne sont pas visibles sur le serveur (req.body.myparam).
J'ai essayé avec la demande de publication ci-dessous, mais je n'ai pas abouti: -
var Host = "http://localhost:3000";
var path = "/myPath";
chai.request(Host).post(path).field('myparam' , 'test').end(function(error, response, body) {
et
chai.request(Host).post(path).send({'myparam' : 'test'}).end(function(error, response, body) {
Le code du nœud JS est donné ci-dessous: -
app.put ('/mypath', function(req, res){ //Handling post request to create league
createDoc (req, res);
})
app.post ('/mypath', function(req, res){ //Handling post request to create league
createDoc (req, res);
})
var createDoc = function (req, res) {
var myparam = req.body.myparam; //league id to create new league
if (!myparam) {
res.status(400).json({error : 'myparam is missing'});
return;
}
};
Le code ci-dessus va à myparam est manquant.
Veuillez me faire savoir quelle est la meilleure façon de faire de même.
Merci d'avance.
La façon dont vous avez écrit, je suppose que vous avez utilisé le package chai-http. La fonction . Field () ne fonctionne pas dans chai-http. Un autre utilisateur l'a signalé ici et a ouvert un problème sur github .
Voici comment vous auriez pu écrire:
.set('content-type', 'application/x-www-form-urlencoded')
.send({myparam: 'test'})
Voici le code complet qui réussit transmet les paramètres au serveur:
test.js
'use strict';
var chai = require('chai');
var chaiHttp = require('chai-http');
chai.use(chaiHttp);
describe('Test group', function() {
var Host = "http://" + process.env.IP + ':' + process.env.PORT;
var path = "/myPath";
it('should send parameters to : /path POST', function(done) {
chai
.request(Host)
.post(path)
// .field('myparam' , 'test')
.set('content-type', 'application/x-www-form-urlencoded')
.send({myparam: 'test'})
.end(function(error, response, body) {
if (error) {
done(error);
} else {
done();
}
});
});
});
server.js
'use strict';
var bodyParser = require("body-parser"),
express = require("express"),
app = express();
app.use(bodyParser.urlencoded({extended: true}));
app.put ('/mypath', function(req, res){ //Handling post request to create league
createDoc (req, res);
});
app.post ('/mypath', function(req, res){ //Handling post request to create league
createDoc (req, res);
});
var createDoc = function (req, res) {
console.log(req.body);
var myparam = req.body.myparam; //league id to create new league
if (!myparam) {
res.status(400).json({error : 'myparam is missing'});
return;
}
};
app.listen(process.env.PORT, process.env.IP, function(){
console.log("SERVER IS RUNNING");
});
module.exports = app;
J'ai trouvé deux façons de résoudre le problème avec un req.body
Vide.
body
en tant que données de formulaire
.put('/path/endpoint')
.type('form')
.send({foo: 'bar'})
// .field('foo' , 'bar')
.end(function(err, res) {}
// headers received, set by the plugin apparently
'accept-encoding': 'gzip, deflate',
'user-agent': 'node-superagent/2.3.0',
'content-type': 'application/x-www-form-urlencoded',
'content-length': '127',
body
as application/json
.put('/path/endpoint')
.set('content-type', 'application/json')
.send({foo: 'bar'})
// .field('foo' , 'bar')
.end(function(err, res) {}
// headers received, set by the plugin apparently
'accept-encoding': 'gzip, deflate',
'user-agent': 'node-superagent/2.3.0',
'content-type': 'application/json',
'content-length': '105',
Dans les deux cas, j'utilise .send({foo: 'bar'})
et non .field('foo' , 'bar')
.
Le problème n'a apparemment rien à voir avec chai-http
. C'est le problème de superagent
. Et chai-http
Utilise superagent
sous le capot.
superagent
essaie de jouer à Machine Learning et de faire des suppositions pour nous. Voici ce que leurs les documents disent :
Par défaut, l'envoi de chaînes définira
Content-Type
Surapplication/x-www-form-urlencoded
Les formats SuperAgent sont extensibles, mais par défaut, "json" et "form" sont pris en charge. Pour envoyer les données en tant que
application/x-www-form-urlencoded
, Appelez simplement.type()
avec "form", où la valeur par défaut est "json".
request.post('/user')
.type('form')
.send({ name: 'tj' })
.send({ pet: 'tobi' })
.end(callback)
chai-http
Le plus gros défaut est qu'ils n'ont pas documenté correctement leur plugin. Vous devez rechercher des réponses partout sur Internet et non sur la page chai-http
GitHub où il doit être.