将数据从JavaScript/HTML页面发送到Express NodeJS服务器

3
我正在开发一个cordova应用程序,使用html5和javascript。
架构如下:手机应用程序向服务器请求数据,服务器再向firebird数据库请求数据。数据库将所需的数据返回给服务器,服务器再将数据以html5 / javascript的形式传递给手机应用程序。
我已经能够通过JSON将数据从服务器发送到手机应用程序,我认为从手机应用程序发送一些数据到服务器也应该是相同的。但是,我不知道如何从手机向这样的服务器发送数据。我已经尽可能简化了问题。
考虑以下javascript代码:
var send = { "name":"John", "age":30, "car":null };
var sendString = JSON.stringify(send);
alert(sendString);
xhttp.send(sendString);

警告信息已发送: {"name":"John","age":30,"car":null}

如何在我的Node.js服务器中检索它? 目前,我的代码如下所示:

app.post('/createEmp', function(req, res){  
    //res.send(req.body.name);
    //console.log('test :' + req.app.post('name'));
    //console.log(req);
    console.log('createEmp');
    if(typeof(req) == 'undefined') {console.log('Y a rien'); } 
    else {
            console.log('La req n est pas vide, son type est : ' + typeof req);
    }    
    console.log(typeof req.query.name);
});

我在评论中列出了我已经尝试过的方法(还有更多)... 每次,req的类型都是已定义的或者是一个对象,但由于它是循环的,所以我无法解析它,因此我不确定它是否是从手机应用程序发送的数据。
所以,您能否给我一些建议,关于如何将数据从手机发送到服务器? (我猜我可以尝试在url中显示数据,然后由服务器解析,但我更喜欢不这样做以保护数据...)。
任何帮助都将不胜感激!非常感谢!
(PS:我已经到处寻找答案,但仍然没有成功。)

2
我认为你应该使用socket.io。这样你就可以在手机和服务器之间创建套接字。然后只需使用套接字发送数据,它将具有更高的性能。 - Zaphiel
谢谢你的回答,Zaphiel,我会对此进行一些研究 :) - Myriam Sarah
您可以在手机和服务器之间使用WebSocket连接。 - raj peer
2个回答

3
首先,在客户端执行以下操作...
var send = { "name":"John", "age":30, "car":null };
var sendString = JSON.stringify(send);
alert(sendString);
xhttp.send(send);

然后,在服务器端,您需要添加一个中间件来填充请求对象中的body参数。
var express=require("express");
var bodyParser=require("body-parser");

var app=express();

// Process application/x-www-form-urlencoded
app.use(bodyParser.urlencoded({extended: true}))

// Process application/json
app.use(bodyParser.json());

app.post('/createEmp', function(req, res){  
//now req.body will be populated with the object you sent
console.log(req.body.name); //prints john
});

1
我猜你的意思是:var send = { "name":"John"... xhttp.send(sendString);} 而不是 xhttp.send(send) - Geza Kerecsenyi

0

谢谢。我尝试了,但当我询问:console.log(req.body.name);时,它仍然返回“未定义”:/。 - Myriam Sarah
当我要求显示JSON.stringify(req.body)时,它返回一个空的主体: {}。 - Myriam Sarah
我已经在上面添加了有关MDN的内容类型标头和POST方法的一些信息。试试这个。 - pkolawa
感谢您!我们和朋友一起解决了这个问题,确实需要使用“setRequestHeader( 'Content-Type','application / json')”!谢谢! :) - Myriam Sarah

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接