有没有办法在nodejs中传递一个默认对象?

时间:2012-09-09 00:03:23

标签: json node.js

我想做这样的事情:

var jsonFileName = aDynamicallyGeneratedJsonFileName(),
    defaultObject = {'my': 'default', 'json': 'object'};

var cachedOrRequiredObject = require(jsonFileName, defaultObject);

如果cachedOrRequiredObject不存在,我希望defaultObject获得jsonFileName,并且我希望require cache保留jsonFileName作为关键字defaultObject,即使jsonFileName不存在。

当然这不起作用 - 特别是在找不到文件时需要出错。我可以做类似的事情:

function myRequire (file, defaultObj) {
   try {
       return require(file);
   catch () {
       return defaultObj;
   }
}

require的每次执行都会触及文件系统,以便在它不存在时尝试查找file。有没有比这更好的方法来复制需求的功能并维护自己的缓存?

1 个答案:

答案 0 :(得分:2)

您必须为不存在的文件维护自己的缓存,require没有理由这样做。一个非常简单的对象缓存就足够了(这是require()内部使用的):

function requireWithDefault(path, default){
    var module
    if ((module = requireCache[path]) === undefined){
        try {
            module = require(path)
        } catch(e) {
            module = requireCache[path] = default
        }
    }
    return module
}