Javascript node.js服务器读取文件顺序?
我的node.js应用程序中有2个js文件 文件a定义全局对象Javascript node.js服务器读取文件顺序?,javascript,node.js,filesystems,Javascript,Node.js,Filesystems,我的node.js应用程序中有2个js文件 文件a定义全局对象foo 在文件b中,我可以参考foo 但如果文件b在文件a之前加载,则会发生错误 我正在使用node的fs模块读取文件。我使用readdir,然后在每个文件上使用forEach require。在我的系统中,文件总是按字母顺序读取,因此从来没有任何问题 我可以依赖于按字母顺序读取这些文件吗?您可以按名称对文件数组进行排序,以确保安全 fs.readdir(path, function(err, files) { files.s
foo
在文件b中,我可以参考foo
但如果文件b在文件a之前加载,则会发生错误
我正在使用node的fs模块读取文件。我使用readdir,然后在每个文件上使用forEach require。在我的系统中,文件总是按字母顺序读取,因此从来没有任何问题
我可以依赖于按字母顺序读取这些文件吗?您可以按名称对文件数组进行排序,以确保安全
fs.readdir(path, function(err, files) {
files.sort(function(a, b) {
return a < b ? -1 : 1;
}).forEach(function(file, key) {
// stuff
});
});
fs.readdir(路径、函数(错误、文件){
文件排序(函数(a,b){
返回a
因为您使用的是一个文件数组,所以最好对数组进行排序,然后再对其进行处理;只有在前一个文件完成后才开始读取新文件。暂时忽略全局变量通常是个坏主意的事实…:-)
如果您已经知道需要加载的文件路径,您可能希望使用以下结构:
var fs=require('fs'),
vm=require('vm');
/**
* loads and evals two initialization files in order
* @param {callback} onComplete called on init completion
* @param {callback} on Error called on error (optional)
* @return null
*/
function init_app(onComplete,onError){
var first_filepath = './file1.js',
second_filepath = './file2.js';
// read/eval first file
fs.readFile(first_filepath,function(first_err,first_result){
if (first_err) {
if(onError) {
onError(first_err.message);
return;
}
else {
throw first_err;
}
}
// evaluate first result
try {
vm.createScript(first_result).runInThisContext();
}
catch (e) {
err_msg='failed to eval source from first file:' + e.type;
if(onError) {
onError(err_msg);
return;
}
else {
throw err_msg;
}
}
// check for existence of foo global
if(foo == undefined) {
var msg='foo is undefined after first file read';
if(onError) {
onError(err_msg);
return;
}
else {
throw err_msg;
}
}
// read/eval second (dependent) file
fs.readFile(second_filepath, function(second_err,second_result){
if (second_err) {
if(onError) {
onError(second_err.message);
return;
}
else {
throw second_err;
}
}
// evaluate second, dependent result
try {
vm.createScript(second_result).runInThisContext();
}
catch (e) {
err_msg='failed to eval source from second file:' + e.type;
if(onError) {
onError(err_msg);
return;
}
else {
throw err_msg;
}
}
// trigger callback
if(onComplete) onComplete();
}); // end fs.readFile(second_filepath,...
}); // end fs.readFile(first_filepath,...
}; // end init_app()
用作:
var onComplete = function(){ console.log('init complete'); },
onError = function(msg){ console.error(msg); };
init_app(onComplete,onError);
同样,如果在应用程序启动时只加载这些文件一次,则应使用require()