I’m trying to send data through a POST request from a node.js server to another node.js server. What I do in the “client” node.js is the following:
var options = {
host: 'my.url',
port: 80,
path: '/login',
method: 'POST'
};
var req = http.request(options, function(res){
console.log('status: ' + res.statusCode);
console.log('headers: ' + JSON.stringify(res.headers));
res.setEncoding('utf8');
res.on('data', function(chunk){
console.log("body: " + chunk);
});
});
req.on('error', function(e) {
console.log('problem with request: ' + e.message);
});
// write data to request body
req.write('data\n');
req.write('data\n');
req.end();
This chunk is taken more or less from the node.js website so it should be correct. The only thing I don’t see is how to include username and password in the options variable to actually login. This is how I deal with the data in the server node.js (I use express):
app.post('/login', function(req, res){
var user = {};
user.username = req.body.username;
user.password = req.body.password;
...
});
How can I add those username and password fields to the options variable to have it logged in?
Thanks
Posting data is a matter of sending a query string (just like the way you would send it with an URL after the
?) as the request body.This requires
Content-TypeandContent-Lengthheaders, so the receiving server knows how to interpret the incoming data. (*)(*) Sending data requires the Content-Type header to be set correctly, i.e.
application/x-www-form-urlencodedfor the traditional format that a standard HTML form would use.It’s easy to send JSON (
application/json) in exactly the same manner; justJSON.stringify()the data beforehand.URL-encoded data supports one level of structure (i.e. key and value). JSON is useful when it comes to exchanging data that has a nested structure.
The bottom line is: The server must be able to interpret the content type in question. It could be
text/plainor anything else; there is no need to convert data if the receiving server understands it as it is.Add a charset parameter (e.g.
application/json; charset=Windows-1252) if your data is in an unusual character set, i.e. not UTF-8. This can be necessary if you read it from a file, for example.