我试图创建一个带有一些服务器端功能的简单网页,但不知何故有两件事不起作用,因为他们应该工作。
通过html按钮即时运行一个客户端javascript来执行http发布请求 客户端javascript
httpRequest = new XMLHttpRequest()
httpRequest.open('POST', '/test2')
httpRequest.send(var1,var2,var3,var4);
Server.js
var express = require('express');
var bodyParser = require("body-parser");
var dbFunc = require("./dbFunctions.js");
var app = express();
var path = require('path');
var port = 8888;
//allow to use body-parser
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
//allow to use static files
app.use(express.static("public"));
//listen to smth
app.post('/test2', function (req, res) {
console.log("worked");
});
//start server
app.listen(port);
console.log("Server running on port" + port);
我的服务器检测到这个帖子的http请求并执行“console.log”,但是我如何从http.request中获取参数作为变量?我尝试使用bodyParser但不知何故我的对象总是空的。
另一件事是,我已经创建了另一个Javascript文件(dbFunctions.js)并且还在服务器文件中实现了它但是如果我尝试运行一个函数(例如dbFunc.test(“hello”))它会说“dbFunc。测试不是一个功能“。
dbFunctions.js
function DBFunctions(){
function test(a){
console.log(a);
}
}
我也试过这样做,但这给了我同样的错误。
function test(a){
console.log(a);
}
有人可以给我一个提示或告诉我我错过了什么吗?
答案 0 :(得分:1)
<强>正确答案为:强>
您将数据发送到帖子请求的方式是错误的,您可以发送格式,
的 xhttp.send("val1=val1&val2=val2");
强>
httpRequest = new XMLHttpRequest()
httpRequest.open('POST', '/test2')
httpRequest.send(var1=var1&var2=var2&var3=var2&var3=var3);
要像HTML表单一样POST数据,请使用setRequestHeader()添加HTTP标头。在send()方法中指定要发送的数据:
httpRequest = new XMLHttpRequest()
httpRequest.open('POST', '/test2')
httpRequest.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
httpRequest.send(var1=var1&var2=var2&var3=var2&var3=var3);
在server.js
中,使用req.body
获取这些值。
app.post('/test2', function (req, res) {
console.log("worked");
console.log(req.body)
});
<强> ANSWER2:强>
在您的dbFunctions.js
文件中,您应该使用节点js 中的模块导出来导出您的功能。
<强> dbFunctions.js:强>
var exports = module.exports = {};
exports.test = function(a) {
console.log(a);
};
您也可以这样做,
module.exports = {
test: function(a) {
console.log(a)
},
}
现在位于 server.js
var dbFunc = require("./dbFunctions.js");
dbFunc.test();
答案 1 :(得分:0)
所有发布的变量都会在req.body
尝试console.log(req.body)
。
其次,你很可能不会从test
导出dbFunction.js
函数,这就是为什么得到&#34; dbFunc.test不是函数&#34;因为dbFunc.test
是undefined
。
注意:正如其中一条评论所述,您需要以正确的方式使用httpRequest.send(var1,var2,var3,var4);
。它不期望多个参数。
赞:httpRequest.send("var=var1&var1=var2")
请参阅:https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/send