我想在我的node.js项目中包含一个.db
数据库文件,用于sqlite3。当不同目录中的文件需要打开数据库连接的模块时,我的问题就出现了。
我的项目结构是这样的:
project/
|--lib/
| |--foo.js
| `--bar.js
|--db/
| `--database.db
`--server.js
我的foo.js
文件包含打开数据库,如下所示:
var sqlite3 = require('sqlite3');
var db = new sqlite3.Database('db/database.db');
module.exports = {
foo: function() {
db.serialize(function() { /* Do database things */ });
}
};
当foo.js
文件需要server.js
时,这一切都正常工作:
var foo = require('./lib/foo');
但是当lib
目录bar.js
中的文件需要时,它不起作用。
var foo = require('./foo');
我认为这是因为当从lib
目录启动此文件时,.db
文件实际应该是../db/database.db
。
我怎样才能解决这个问题,我该怎么办?
答案 0 :(得分:4)
在不同脚本中使用sqlite3.Database
函数时,当前目录的概念不同。它按照sqlite3源代码this line中的设计工作。
因此,每次使用时都应明确指定当前目录。根据您的项目布局,lib/foo.js
中数据库文件的正确路径是
var path = require('path')
// specify current directory explicitly
var db = new sqlite3.Database(path.join(__dirname, '..', 'db', 'database.db'));
然后无论在何处需要foo.js
,它都能正常工作。