【问题标题】:Dealing with Relative Paths with node.js使用 node.js 处理相对路径
【发布时间】:2015-03-02 05:39:11
【问题描述】:

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

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

【问题讨论】:

    标签: node.js sqlite relative-path


    【解决方案1】:

    在不同的脚本中使用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,它都可以工作。

    【讨论】:

      猜你喜欢
      • 2012-07-07
      • 1970-01-01
      • 1970-01-01
      • 2015-03-27
      • 1970-01-01
      • 1970-01-01
      • 2012-09-23
      • 1970-01-01
      • 2019-10-14
      相关资源
      最近更新 更多