使用NODEJS

时间:2017-12-01 16:58:25

标签: node.js express

我有以下设置: 1)NodeJs服务器 2)外部申请

我希望从外部应用程序收到POST请求,并将POST请求的正文发送到网页进行可视化。

到目前为止,我可以成功接收POST请求并将其打印在服务器控制台中。 我使用express和body-parser来处理服务器和消息体。

以下是代码:

var express = require("express");
var myParser = require("body-parser");
var app = express();

app.use(myParser.json({extended : true}));
app.post("/", function(request, response) {
console.log(request.body); 
});

app.listen(3000);

在POST事件中,我只打印正文消息。我甚至没有发回回来,因为我知道它对外部应用程序没用。 现在,对于第二部分,网页上的可视化,我需要一个" get"我的应用中的事件,由连接到服务器的浏览器提供。

所以我修改了服务器代码如下:

var express = require("express");
var myParser = require("body-parser");
var app = express();

app.use(myParser.json({extended : true}));
app.post("/", function(request, response) {
console.log(request.body); 
app.get("/index.html",function(req,res){
res.end(request.body);});
});

app.listen(3000);

在服务器启动时,我没有收到任何错误,但如果我在index.html资源上打开浏览器,则会出现此错误:

TypeError:第一个参数必须是字符串或缓冲区 在ServerResponse.end(_http_outgoing.js:742:13)

at /usr/share/myapp.js:10:5

在Layer.handle [as handle_request](/usr/share/myapp/node_modules/express/lib/router/layer.js:95:5)

下一步(/usr/share/myapp/node_modules/express/lib/router/route.js:137:13)

在Route.dispatch(/usr/share/myapp/node_modules/express/lib/router/route.js:112:3)

在Layer.handle [as handle_request](/usr/share/myapp/node_modules/express/lib/router/layer.js:95:5)

at /usr/share/myapp/node_modules/express/lib/router/index.js:281:22

在Function.process_params(/usr/share/myapp/node_modules/express/lib/router/index.js:335:12)

下一步(/usr/share/myapp/node_modules/express/lib/router/index.js:275:10)

at jsonParser(/usr/share/myapp/node_modules/body-parser/lib/types/json.js:109:7)

你能帮我弄清问题是什么吗?

2 个答案:

答案 0 :(得分:2)

这里有一些事情要发生。首先,您已经在app.use方法中声明了app.get和app.post方法,您需要将它们分开,如下所示:

app.use(myParser.json({extended : true}));

app.post("/", function(request, response) {
    console.log(request.body); 
});

app.get("/index.html",function(req,res) {
    res.end(request.body);
});

在get方法中使用res.end时,还需要确保声明内容类型。

查看bodyparser的文档,了解一个与您要实现的目标非常接近的示例,它可能会对您有所帮助:https://github.com/expressjs/body-parser#expressconnect-top-level-generic

答案 1 :(得分:0)

您无法通过尝试使用从外部应用程序收到的POST请求的request.body响应网页的GET请求,将从外部应用程序接收的数据发送到网页。做你想要实现的最简单的方法就是这样。

app.use(myParser.json({extended : true}));

app.post("/putData", function(request, response) {
    //store data received from the app in the database.
});

app.get("/getData",function(req,res) {
    //retrieve data from the database and send the response to the browser.
});

您还可以在实时收到数据后立即使用套接字更新网页上的数据。