将数据从 javascript/html 页面发送到 Express NodeJS 服务器

Posted

技术标签:

【中文标题】将数据从 javascript/html 页面发送到 Express NodeJS 服务器【英文标题】:Sending data from javascript/html page to Express NodeJS server 【发布时间】:2017-12-15 09:21:49 【问题描述】:

我正在使用 html5 和 javascript 开发一个 cordova 应用程序。

架构如下:电话应用程序向服务器请求一些东西,服务器询问火鸟数据库。数据库回复服务器,将请求的数据提供给电话应用程序(在 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);
);

我让 cmets 让你知道我已经尝试过什么(还有更多)...... 每次,req 的类型要么是定义的,要么是一个对象,但由于它是循环的,我无法解析它,所以我不确定它是从电话应用程序发送的数据。

那么您能否给我一条建议,说明如何将数据从手机发送到服务器? (我想我可以尝试将数据显示在服务器会解析的 url 中,但我不想这样做来保护数据......)。

任何帮助将不胜感激!非常感谢 !

(PS:我一直在到处寻找一些答案,但还没有奏效)

【问题讨论】:

我认为你应该使用 socket.io。因此,您可以在电话和服务器之间创建套接字。然后只需使用套接字发送数据。它会有更多的性能。 谢谢你的回答,Zaphiel,我会对此做一些研究:) 手机和服务器之间可以使用websocket连接。 【参考方案1】:

req 是一个充满每个请求的对象。您需要获取请求的正文。这可能会对您有所帮助:How to retrieve POST query parameters?

但是因为没有太多的客户端 JavaScript 我要问:你指定要发布这个吗?

尝试像这里一样:https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/send ...当您使用 xhr.setRequestHeader("Content-Type", "application/json") 时,您可能不需要将其字符串化。

【讨论】:

谢谢。我试过了,但是当我问:console.log(req.body.name); ,它仍然返回 'undefined' :/. 当我要求显示 JSON.stringify(req.body) 时,它返回一个空正文:。 我从上面的 MDN 添加了一些关于内容类型标头和 POST 方法的信息。试试这个。 谢谢!!一段时间后,我们和一位朋友解决了这个问题,正是这个“setRequestHeader("Content-Type", "application/json")" 是必要的!谢谢 ! :)【参考方案2】:

首先在客户端执行此操作..

var send =  "name":"John", "age":30, "car":null ;
var sendString = JSON.stringify(send);
alert(sendString);
xhttp.send(send);

然后在服务器端,您需要添加一个中间件,该中间件将填充您的请求对象中的主体参数。

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
);

【讨论】:

我假设您的意思是:var send = "name":"John"... xhttp.send(sendString); 而不是 xhttp.send(send)?

以上是关于将数据从 javascript/html 页面发送到 Express NodeJS 服务器的主要内容,如果未能解决你的问题,请参考以下文章

jQuery Mobile:将数据从一个页面发送到另一个页面

如何使用ajax将多个数据从控制器发送到页面html

如何在不刷新页面的情况下将数据从 Android 发送到 PHP 并显示

Vue js将数据从api发送到新页面

将数据从 java 发送到 javascript 页面到 href 函数中

如何将 json 数据从我的 jsp 页面发送到 spring rest 控制器