使用node.js处理相对路径

时间:2015-01-04 14:52:55

标签: node.js sqlite relative-path

我想在我的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

我怎样才能解决这个问题,我该怎么办?

1 个答案:

答案 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,它都能正常工作。