使用 node.js 处理相对路径
Dealing with Relative Paths with node.js
我想在我的 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 */ });
}
};
当 server.js
文件需要 foo.js
时,一切正常,如下所示:
var foo = require('./lib/foo');
但是当 lib
目录 bar.js
中的文件需要时它不起作用。
var foo = require('./foo');
我认为这是因为当从 lib
目录启动此文件时,.db
文件实际上应该是 ../db/database.db
.
我该如何解决这个问题,我应该怎么做?
概念当前目录在不同的脚本中使用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
.
我想在我的 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 */ });
}
};
当 server.js
文件需要 foo.js
时,一切正常,如下所示:
var foo = require('./lib/foo');
但是当 lib
目录 bar.js
中的文件需要时它不起作用。
var foo = require('./foo');
我认为这是因为当从 lib
目录启动此文件时,.db
文件实际上应该是 ../db/database.db
.
我该如何解决这个问题,我应该怎么做?
概念当前目录在不同的脚本中使用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
.