我有以下设置: 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)
你能帮我弄清问题是什么吗?
答案 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.
});
您还可以在实时收到数据后立即使用套接字更新网页上的数据。