gpt4 book ai didi

Node.JS - fs.exists 不工作?

转载 作者:搜寻专家 更新时间:2023-11-01 00:33:39 26 4
gpt4 key购买 nike

我是 Node.js 的初学者,在处理这段代码时遇到了问题。

var fs = require('fs');

Framework.Router = function() {

this.run = function(req, res) {
fs.exists(global.info.controller_file, function(exists) {
if (exists) {
// Here's the problem
res.writeHead(200, {'Content-Type':'text/html'});
var cname = App.ucfirst(global.info.controller)+'Controller';
var c = require(global.info.controller_file);
var c = new App[cname]();
var action = global.info.action;
c[action].apply(global.info.action, global.info.params);
res.end();
} else {
App.notFound();
return false;
}
});
}
};

问题出在检查“global.info.controller_file”是否存在之后的部分,我似乎无法让代码在以下内容中正常工作:if (exists) { ... NOT WORKING }我尝试注销该部分中所有变量的值,并且它们具有预期值,但是该行: c[action].apply(global.info.action, global.info.params);
未按预期运行。它应该调用 controller_file 中的函数并且应该执行简单的 res.write('hello world');。在我开始使用 fs.exists 检查文件之前,我没有遇到这个问题。 if 语句中的所有内容在此检查之前都运行良好。

为什么代码没有按预期运行?为什么请求刚刚超时?它与整个同步与异步的事情有关吗? (对不起,我是一个完全的初学者)

谢谢

最佳答案

就像其他人评论的那样,我建议您重写代码以使其更符合 Node.js 设计模式,然后查看您的问题是否仍然存在。与此同时,以下内容可能会有所帮助:

关于不要在“运行时”动态使用 require 的建议应该被注意,并且在每个请求上调用 fs.exists() 是非常浪费的。但是,假设您想加载目录中的所有 *.js 文件(可能是“ Controller ”目录)。这最好使用 index.js 文件来完成。

例如将以下内容保存为app/controllers/index.js

var fs = require('fs');
var files = fs.readdirSync(__dirname);
var dotJs = /\.js$/;
for (var i in files) {
if (files[i] !== 'index.js' && dotJs.test(files[i]))
exports[files[i].replace(dotJs, '')] = require('./' + files[i]);
}

然后,在 app/router.js 的开头,添加:

var controllers = require('./controllers');

现在您可以使用 controllers.test 访问 app/controllers/test.js 模块。所以,而不是:

fs.exists(controllerFile, function (exists) {
if (exists) {
...
}
});

简单地:

if (controllers[controllerName]) {
...
}

这样您就可以保留所需的动态功能,而无需不必要的磁盘 IO。

关于Node.JS - fs.exists 不工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15603564/

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