ExpressJS获取post参数和外部javascript函数的用法

时间:2018-03-28 10:35:28

标签: javascript node.js http express

我试图创建一个带有一些服务器端功能的简单网页,但不知何故有两件事不起作用,因为他们应该工作。

通过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);
}

有人可以给我一个提示或告诉我我错过了什么吗?

2 个答案:

答案 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)
  });

XMLHttp request example

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

Node js module exports

答案 1 :(得分:0)

所有发布的变量都会在req.body尝试console.log(req.body)

中提供

其次,你很可能不会从test导出dbFunction.js函数,这就是为什么得到&#34; dbFunc.test不是函数&#34;因为dbFunc.testundefined

注意:正如其中一条评论所述,您需要以正确的方式使用httpRequest.send(var1,var2,var3,var4);。它不期望多个参数。

赞:httpRequest.send("var=var1&var1=var2")

  

请参阅:https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/send