2015-01-04 131 views
2

我想包含一个.db数据库文件,用于在我的node.js项目中使用sqlite3。当打开数据库连接的模块被不同目录中的文件需要时,我的问题就出现了。用node.js处理相对路径

我的项目结构如下所示:

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 */ }); 
    } 
}; 

当从server.js文件等所需foo.js这一切工作正常所以:

var foo = require('./lib/foo'); 

但是,如果需要,lib目录中的文件bar.js不起作用。

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

我想这是因为当这个文件是从lib目录开始,则.db文件实际上应该是../db/database.db

我该如何解决这个问题,我该怎么做?

回答

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