2016-04-18 8 views
0

Haben ein Problem mit etwas, das relativ einfach sein sollte. Ich bin eine POST-Anforderung mit JSON-Daten zu senden, wie folgt:Knoten js + Express 4 Parsen JSON POST Anfrage

curl -H "Content-Type : application/json" -X POST -d '{"searchbar":"cat"}' http://someurl.com/public/search 

In meiner Anwendung ich eine Route haben ... unter ‚/ Strecken‘ ich die bodyParser gesetzt haben, wie folgt:

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

In der Route habe ich var searchbar = req.body.searchbar

Allerdings ist die variable Suchleiste immer undefiniert.

kann ich die Daten im Körper sehen wie folgt aus:

{ '{searchbar:cat}': '' } 

Offensichtlich werden die Daten entweder nicht richtig von der Curl gesendet werden (so meine Locke falsch ist) oder die Daten durch die nicht analysiert werden KörperParser. Kann jemand helfen ?

EDIT: Routen/index.js

var express = require('express'); 
var bodyParser = require('body-parser'); 
var moment = require('moment'); 
var fs = require('fs'); 
var router = express.Router(); 

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

router.all('*',function(req,res,next) { 
    res.header("Access-Control-Allow-Origin", "*"); 
    res.header("Access-Control-Allow-Headers", "Cache-Control, Pragma, Origin, Authorization, Content-Type, X-Requested-With"); 
    res.header("Access-Control-Allow-Methods", "GET, PUT, POST, OPTIONS"); 
    next(); 

}); 


router.post('/public/search/', function (req, res) { 
    res.header("Access-Control-Allow-Origin", "*"); 
    res.header("Access-Control-Allow-Headers", "Cache-Control, Pragma, Origin, Authorization, Content-Type, X-Requested-With"); 
    res.header("Access-Control-Allow-Methods", "GET, PUT, POST, OPTIONS"); 

    var searchbar = req.body.searchbar; 
    console.log("Searchbar is : " + searchbar); 
    console.log("body is : " + require('util').inspect(req.body, false, null)); 
    }); 

modeul.exports = router; 

UPDATE:

Ich benutzte Postbote (Chrom-Plugin) und verwaltet die Daten senden und analysieren - es muss ein Problem mit Curl in diesem Fall ...

+0

Daten benötigt nicht richtig .. überprüfen curl Post einmal agian –

+0

können Sie Ihren Code schreiben vollständig sendet, damit wir verstehen können, wo Problem ist –

+0

@Srinivas zur Beschreibung hinzugefügt haben – avrono

Antwort

0

Sind die Daten in Anführungszeichen wie folgt:

curl -H "Content-Type : application/json" -X POST -d '{"searchbar":"cat"}' http://someurl.com/public/search 

In Ihrem Fall ist es nicht json seine s-Zeichenfolge, so ist es undefined.

EDIT:

Statt dessen:

router.use(bodyParser.json()); 

für die Sie interessieren:

router.use(express.bodyParser()); 
+0

Ich habe das mit "und mit" versucht, aber es ist nicht das Problem – avrono

+0

@avrono können Sie Ihre Routen Code? – Subburaj

+0

@avrono ändern bodyParser.urlencoded ({extended: true}) zu erweitert: false – QoP

0

ich endlich dieses "Geheimnis" gelöst

curl -v -H "Accept: application/json" -H "Content-type: application/json" -X POST -d '{"searchbar":"cats"}' http://someurl/public/search 

Sowohl das Akzeptieren und Inhalt-Typ e-Header wurden

Verwandte Themen