gpt4 book ai didi

javascript - 捕获 JavaScript 中的返回函数

转载 作者:行者123 更新时间:2023-12-03 05:22:04 24 4
gpt4 key购买 nike

我有以下代码:

function(staticPath) {
console.log('static Path = ' +staticPath);
return function(data, response) {

console.log('data = ' +data);
console.log('response = ' +response);
var readStream;
// Fix so routes to /home and /home.html both work.
data = data.replace(/^(\/home)(.html)?$/i, '$1.html');
data = '.' + staticPath + data;
fs.stat(data, function(error, stats) {
if (error || stats.isDirectory()) {
return exports.send404(response);
}
readStream = fs.createReadStream(data);
return readStream.pipe(response);
});
}
}

该函数主要解析 HTML 文件的路径并显示文件的内容。

我无法理解如何从外部调用此方法。

我这样调用它:

staticFile("D:\\Node Applications\\public\\home.html")

我可以在变量 innerFunc 中捕获它,并且可以将内部函数调用为 innerFunc(response),其中 response http 的 serverResponse 我有引用,但我不确定如何传递 data 参数。

我不明白幕后发生了什么。谁能解释一下吗?我们在 javascript 中经常遇到这样的代码吗?

编辑:为了把事情说清楚:还有一种方法如下:

function(data, response) {
response.writeHead(200, {
'Content-Type': 'application/json'
});
response.end(JSON.stringify(data));
}

我从 Node 服务器逻辑调用如下:

http.createServer(function(req, res) {
// A parsed url to work with in case there are parameters
var _url;
// In case the client uses lower case for methods.
req.method = req.method.toUpperCase();
console.log(req.method + ' ' + req.url);

if (req.method !== 'GET') {
res.writeHead(501, {
'Content-Type': 'text/plain'
});
return res.end(req.method + ' is not implemented by this server.');
}
if (_url is something like //localhost:1337/employees) {
//call employee service which returns *data*.
// send the data with a 200 status code
return responder.sendJson(data, res);
});
} else {
// try to send the static file
/*res.writeHead(200);
res.end('static file maybe');*/
console.log('Inside else');
var staticInner = responder.staticFile("D:\\Node Applications\\public\\home.html");
staticInner(res);
}

// res.end('The current time is ' + Date.now())
}).listen(1337, '127.0.0.1');

正如人们所看到的,没有data变量传递给innerFunc,因此,很困惑。

最佳答案

根据“innerFunc”,似乎data是一些字符串,与staticPath连接,形成文件的路径。正如我们所看到的,该路径是使用 fs.stat 进行测试的。也许客户端应该发送一些自定义数据?无论如何,对于这样的变量来说,data 似乎是一个非常糟糕的名字。

该函数试图做的似乎是发送一个文件作为响应? staticPath 应该是相对于该代码所在的 Javascript 文件的路径,因为它是这样连接的:

data = '.' + staticPath + data;

这将以类似于 ./some/path/index.html 的形式结束。 staticPath 的值将是 /some/pathdata 的值将是 index.html。因此,如果您的 JS 文件位于 /home/foo/node/index.js 中,则“innerFunc”将尝试查找的文件将位于 /home/foo/node/some 中/path/index.html.

如果您将 "D:\\Node Applications\\public\\home.html" 传递给 staticFile() ,您会得到一些东西像 .D:\\Node Applications\\public\\home.htmlindex.html 显然是一个无效文件。

回答函数返回函数的意义是什么

在这种情况下,正如 mgouault 所说,这样做根本没有意义。也许程序员有一些想法,但在编程时改变了它,函数最终变成了这样(有时会发生)。

关于javascript - 捕获 JavaScript 中的返回函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41334261/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com