我为特定的服务器功能创建了一个单独的JS文件。示例代码如下:
我-data.js
var exports = module.exports = {};
exports.getData = function (request, response) {
var myData = [
{
"value": 1
},
{
"value": 2
},
];
response.json(myData);
};
在我的 app.js 中,我正在尝试在请求发出时调用该特定函数。
app.js的工作示例
var express = require("express");
var app = express();
var port = process.env.PORT || 3000;
var myData = require("./lib/my-data.js");
app.engine(".html", require("ejs").__express);
app.set("views", __dirname + "/views");
app.set("view engine", "html");
app.use(express.static(__dirname));
// Line below is what I'm trying to achieve.
//app.get("/get-data", myData.getData(request, response));
// Working line
app.get("/get-data", function(request, response) {
myData.getData(request, response);
});
app.get("*", function (request, response) {
response.render("index");
});
app.listen(port, function () {
console.log("Listening on port " + port);
});
让我感到困扰的是,app.get("/get-data", myData.getData(request, response));
行在
app.get("/get-data", function(request, response) {
myData.getData(request, response);
});
确实
这两种方法有什么区别?
我更喜欢使用第一个,因为它干净而且精确,但我似乎无法使它工作。
答案 0 :(得分:1)
app.get("/get-data", myData.getData);
解决了这个问题。
app.get
允许您提供回调函数,这是您提供的第二个参数。
我将简化此问题并调用该函数get(string, func)
。在这个函数中,通常会调用你提供的函数:
function get(string, func) {
var request = "foo";
var response = "bar";
// ...
func(request, response);
}
因此,您必须传递函数的名称才能正确调用您的函数,因此app.get("/get-data", myData.getData);
可以正常工作。
但是,如果您提供第二个参数get("/get-data", myData.getData(request, response));
,就像在第一种情况下一样,您不再为func
参数提供函数,而只是从{{1}返回的值功能。
例如,如果您的功能是:
myData.getData(...)
function getData(req, res) {
return 1;
}
函数最终会执行以下操作:
get
在第二种情况下:
get("foo", 1) {
// ...
1(request, response);
}
这现在传递匿名函数作为回调,在其中你只是调用自己的函数,因此将按预期工作。