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

问题描述 投票:0回答:2

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

通过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.test不是一个功能“。

dbFunctions.js

function DBFunctions(){
    function test(a){
        console.log(a);
    }
}

我也尝试过这样的事情,但这给了我同样的错误。

function test(a){
console.log(a);
}

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

javascript node.js http express
2个回答
1
投票

正确答案为:

你发送数据到post请求的方式是错误的,你应该发送qazxsw poi的格式

xhttp.send("val1=val1&val2=val2");

要像HTML表单一样POST数据,请使用setRequestHeader()添加HTTP标头。在send()方法中指定要发送的数据:

httpRequest = new XMLHttpRequest()
httpRequest.open('POST', '/test2')
httpRequest.send(var1=var1&var2=var2&var3=var2&var3=var3);

在你的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:

XMLHttp request example文件中,您应该使用节点js中的模块导出来导出函数。

dbFunctions.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();


0
投票

所有发布的变量都可以在Node js module exports中找到req.body

其次你很可能不从console.log(req.body)输出test函数,这就是为什么得到“dbFunc.test不是函数”,因为dbFunction.jsdbFunc.test

注意:正如其中一条评论所述,您需要以正确的方式使用undefined。它不期望多个参数。

喜欢:httpRequest.send(var1,var2,var3,var4);

请参考:httpRequest.send("var=var1&var1=var2")

© www.soinside.com 2019 - 2024. All rights reserved.