如何将参数/参数传递给节点js

时间:2017-08-24 09:53:10

标签: javascript node.js

首先,我刚开始使用节点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传递给函数。

提前致谢

3 个答案:

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

...然后使用testreq调用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函数有两个参数 - reqres。假设您使用express创建HTTP服务器,这将表示传入请求和出站响应。因此,我将了解如何表达附加POST数据或查询参数之类的内容,以便允许您将动态数据传递到路由处理程序。

其次,您可以使用template literals在Javascript中插入字符串。例如:

`select * from ${myTableParameter}`