Skip to content
Advertisement

How to access XML POST request with node.js?

I making a web app with node.js.I have a API on /api/users/register that takes name and password.I want to sent a POST request to that adress with XMLHttpRequest.The request comes to the API but i cant figure out how to access name and password. I tried to access with req.body but it returns an empty list.Is there any other method for accessing data?

Heres my XML request file

const submitBtn = document.getElementById('submitBtn')

function registerUser() {
    const name = document.getElementById('name')
    const password = document.getElementById('password')
    const xhr = new XMLHttpRequest()
    xhr.open('POST', '/api/users/register')
    xhr.send(JSON.stringify({name:name.value, password:password.value}))
}

submitBtn.addEventListener('click', registerUser)

Advertisement

Answer

Since you are passing a string to send(), XHR is going to set a Content-Type: text/plain request header by default. The first thing you need to do is override that.

xhr.setRequestHeader("Content-Type", "application/json");

The in the server-side code you haven’t shared with us, you need to read the request body, parse it as JSON, and (assuming you want to read it from req.body) assign it to req.body.

Assuming you are using Express.js, see the documentation which says:

req.body

Contains key-value pairs of data submitted in the request body. By default, it is undefined, and is populated when you use body-parsing middleware such as express.json() or express.urlencoded().

So:

const express = require('express')
const app = express()
const port = 3000

app.get('/', (req, res) => {
  res.send('Hello World!')
});

app.use(express.json());

app.post('/some-path', (req, res) => {
    const { name, password } = req.body;
    console.log(name, password);
    res.send("some response");
});

app.listen(port, () => {
  console.log(`Example app listening on port ${port}`)
})
User contributions licensed under: CC BY-SA
4 People found this is helpful
Advertisement