首先,我刚开始使用节点js(看看问题),所以请耐心等待我
我这样做是为了让我的问题更加清晰。我在另一个JS上调用了一个函数:
exports.test = function(req, res){
connection.query('SELECT * FROM `test`', function (error, results) {
console.log(results);
});
};
然后我可以用object.test();
我想通过从另一个JS传递表名来概括这个函数,而不是硬编码它。 怎么做?
在Java中,我可以轻松地使用Google搜索。但是,在Node上,几乎所有搜索结果都会告诉url(POST / GET)中的参数,但我需要的是将param / args传递给函数。
提前致谢
答案 0 :(得分:3)
这不是一个Node问题,这是一个JavaScript问题。
您可以创建一个返回函数的函数。将表名传递给构建器,然后在构建器创建的函数中使用它:
exports.makeTest = function(tableName) {
return function test(req, res){
connection.query('SELECT * FROM `' + tableName + '`', function (error, results) {
console.log(results);
});
};
};
注意:我认为tableName
来自您控制且可信赖的代码;否则,上面不接受字符串连接。
你会这样使用它:
var test = makeTest("test");
...然后使用test
和req
调用res
(或者更有可能将其传递给类似Express的内容)。
这是一个非节点示例,仅用于显示部件的工作原理:
function makeTest(tableName) {
return function test(req, res) {
console.log("Table name is:", tableName);
console.log("req is:", req);
console.log("res is:", res);
};
}
var test = makeTest("test");
console.log("Call 1:");
test({name: "req1"}, {name: "res1"});
console.log("Call 2:");
test({name: "req2"}, {name: "res2"});
.as-console-wrapper {
max-height: 100% !important;
}
在tableName
返回后,test
函数仍然可以访问makeTest
参数,这似乎令人惊讶。这就是JavaScript的闭包的本质。您可以在此处阅读有关闭包的更多信息:
答案 1 :(得分:1)
您可以在此
中使用高阶函数的概念module.exports = function(tableName) {
return function(req, res) {
//...here you have tableName accessible
};
};
在您应用此控制器的路线中(如果您按照快速应用程序的一般流程),
const somethingController = require('/path/to/file');
route.get('/something', somethinController('test')); //...pass the table Name
答案 2 :(得分:0)
所以这里有多个要点。
首先,您的test
函数有两个参数 - req
和res
。假设您使用express
创建HTTP服务器,这将表示传入请求和出站响应。因此,我将了解如何表达附加POST
数据或查询参数之类的内容,以便允许您将动态数据传递到路由处理程序。
其次,您可以使用template literals在Javascript中插入字符串。例如:
`select * from ${myTableParameter}`