我是一位经验丰富的程序员,但对于nodejs,nedb,Mocha来说相对较新。
nedb是一个用于小数据使用的nodejs npm模块,它复制了Mongodb中使用的一些接口。我选择它是因为我正在构建一个应用程序以在Beaglebone Black或Raspberry Pi上运行,并且不需要Mongodb的开销来满足我的小数据需求。
但是,我对nedb的文件名路径部分有疑问。如果我工作的myapp.js在当前路径的本地调用,它工作正常,但如果我从不同的目录调用它,如我的Mocha测试目录,那么nedb不会使用相同的工作路径。它也不会在相对路径上工作;我必须指定完整路径,从/ home开始,然后才能从Mocha测试目录开始工作。毋庸置疑,这既不方便又禁止生产,因为它没有以/ home为基础在生产中运行。
在下面的代码中,myapp.js是我正在开发和测试的应用程序。 useMyapp.js是一个实用程序测试,使用myapp.js来简化。这些都在同一目录中,并在调用useMyapp.js时正常工作。
myapp.js位于/ home / geek / project / public / javascripts /
以下是myapp.js的代码:
var Datastore = require("nedb");
var db = new Datastore({filename: "./calEvents.db", autoload: true});
function Myapp(year, month) {
console.log('myapp: year: ' + year + ', month: ' + month);
this.year = year;
this.month = month;
}
Myapp.prototype.getAllData = function() {
db.find({}, function(err, docs) {
if(err) {
console.error('error: ', err);
} else {
console.log(" docs found: ", docs);
}
});
};
module.exports = Myapp;
useMyapp.js位于/ home / geek / project / public / javascripts /
的同一目录中以下是useMyapp.js的代码,它可以正常工作,输出预期的nedb记录。
var Myapp = require("./myapp");
var myapp = new Myapp(2016, "Mar");
myapp.getAllData();
我将useMyapp.js复制到我的Mocha测试目录,将其重命名为TestUseMyapp.js,进入/ home / geek / project / test / 我调整了myapp.js相对路径的require语句 这是/ home / geek / project / test /
中TestUseMyapp.js的内容var Myapp = require("../public/javascripts/myapp");
var myapp = new Myapp(2016, "Mar");
myapp.getAllData();
通过nodejs运行此输出的输出是一个空数据集: 发现文档:[]
问题: TestUseMyapp.js能够根据'要求'查找并加载myapp.js。声明,但是当从另一个目录调用myapp.js时,nedb的filename参数不起作用。这导致我在开发,Mocha测试和生产中运行之间出现问题,因为文件路径都不同。
我创建了myapp.js的副本,将其命名为myapp2.js,并将其与/ home / geek / project / public / javascripts中的myapp.js保存在同一目录中。在此,我更改了nedb filename参数的路径。 这里是myapp2.js中的代码请注意,仅更改文件名参数路径:
var Datastore = require("nedb");
var db = new Datastore({filename: "/home/geek/project/public/javascripts/calEvents.db", autoload: true});
function Myapp(year, month) {
console.log('myapp: year: ' + year + ', month: ' + month);
this.year = year;
this.month = month;
}
Myapp.prototype.getAllData = function() {
db.find({}, function(err, docs) {
if(err) {
console.error('error: ', err);
} else {
console.log(" docs found: ", docs);
}
});
};
module.exports = Myapp;
当我使用完整路径调用myapp2.js的测试时,这可以正常工作。
问题: 如何使用nedb解决文件名路径问题,以便我不必在开发,Mocha测试和部署到生产之间进行更改?
谢谢!
答案 0 :(得分:0)
我能够通过插入__dirname作为filename参数的一部分来解决这个问题。