Emy eminescu
Emy eminescu

Reputation: 103

Ajax - POST request content doesn't get to the server

The problem I'm having is, the content that I try to send in my post request to the server doesn't get sent, but the request works.

Here's the code for the client:

$("#searchBtn").click(function(e){

    try{
        var xhttp = new XMLHttpRequest();
        xhttp.open("POST", "/search/searchRequest", true);

        console.log(($("#searchedSymptoms").val())) // gets posted in the console correctly

        xhttp.setRequestHeader("Content-type", "text/plain"); // doesn't work without it either
        xhttp.send($("#searchedSymptoms").val());
        //xhttp.send(JSON.stringify($("#searchedSymptoms").val())); // doesn't work either

        xhttp.onreadystatechange = function() {
            if (this.readyState === 4 && this.status === 200) {

                console.log(xhttp.responseText); // gets the correct response from server

            }
            else{
                console.log(xhttp.responseText);
            }
        };
    }
    catch(err){
        console.log(err);
    }


});

And here's the server-side code:

var express = require("express");
var router = express.Router();
router.post("/searchRequest", function(req, res, next){
    console.log("must get the client request:");
    console.log(req.body);
    //console.log(JSON.stringify(req.body)); // doesn't work either

});

In the server, what get's outputed to the console is this:

{}

Any thoughts on what I'm doing wrong ?

Upvotes: 0

Views: 31

Answers (1)

Terry Lennox
Terry Lennox

Reputation: 30675

You need to use a text body-parser, Express won't do it by default, here's an example, using pretty much the same server side code you are:

"use strict";

var express = require("express");
var router = express.Router();
var bodyParser = require("body-parser");

router.post("/searchRequest", function(req, res, next){
    console.log("must get the client request:");
    console.log("SearchRequest: " + req.body);
    res.end('ok', 200);
});

var port = 8081;

var app = express();
app.use(bodyParser.text());
app.use(router);
app.listen(port);
console.log("Express listening on port " + port);

You can configure the way the text body parser operates exactly by using the guide here: https://www.npmjs.com/package/body-parser#bodyparsertextoptions

Upvotes: 1

Related Questions