如何使用Express 4.0将一些文本从客户端传回服务器端?

时间:2014-06-22 11:46:04

标签: javascript node.js post express

有类似的SO问题,但我找不到这个问题的准确答案。

我需要不时地将一些文本从客户端推回到服务器端。用户方不期望来自服务器端的答复。我虽然会使用POST如下:

var request = new XMLHttpRequest();
request.open('POST', MY_URL, true);
request.setRequestHeader('Content-Type', 'text/html;charset=utf-8');
request.send(myMsg);

从Chrome中,我可以看到标头和有效负载是正确的。状态为200 OK。

在服务器端,我尝试检索正文内容,如下所示:

function myFunction(req, res) {

    console.log("Reached myFunction, reqBody is: '" + req.body + "'");
    res.end();

}    

但我明白了:

Reached myFunction, reqBody is: 'undefined'

我做错了什么?我应该使用带有JSON的'application/json; charset=utf-8'吗?

更新

我一直在做更多的研究,服务器端的req对象没有body属性。但是,headers没问题。

我使用以下内容启动我的申请:

var express = require('express');
var bodyParser = require('body-parser');
var cookieParser = require('cookie-parser');
...
self.app = express();
...
self.app.use(bodyParser());
self.app.use(cookieParser());

有什么想法吗?

2 个答案:

答案 0 :(得分:4)

使用body-parser中间件时,内容类型匹配很重要。在这种情况下,您已指定text/html,因此您应该使用bodyParser.text()中间件。此外,您需要将text/html指定为type。所以一个完整的例子如下:

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

var app = express();

app.use(bodyParser.text({
    type: "text/html"
}));

app.post("/test", function(req, res) {
    console.log(req.body);
    res.end();
});

app.listen(3000);

您还可以使用通配符(例如type: "text/*")作为bodyParser.text()的选项。

当我使用你的例子运行时,我看到"嗨"我点击/测试时输出到控制台。

答案 1 :(得分:0)

尝试:

request.setRequestHeader('Content-Type', "application/x-www-form-urlencoded");

这可能有所帮助。