node.js - 使用 node.js 处理相对路径

标签 node.js sqlite relative-path

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

我的项目结构是这样的:

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 函数时,当前目录 的概念不同。它按照 this line 中的设计工作sqlite3 源代码。

所以每次使用时都应该显式指定当前目录。根据您的项目布局,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 - 使用 node.js 处理相对路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27766734/

相关文章:

android - 在android中将数据从一个表复制到另一个表

c# - Xamarin 使用SQLite 组件。无法在屏幕上查看已保存的项目

javascript - 如何不依赖 React/Webpack 3 应用程序中的相对路径

node.js - 缩放 Socket.IO 并向所有所属客户端广播

node.js - npm 删除失败的安装模块

javascript - foreach 循环中的 Promise

node.js - 谷歌浏览器未设置从 NodeJS/Express 服务器发送的 cookie

objective-c - Sqlite 使用 void 方法绑定(bind)文本?

Ruby 路径管理

ruby-on-rails - 部分引用其他部分的相对路径