我在这里面临一些分析瘫痪.使用NodeJS编程数据库有很多选择,我有点迷失.
我正在使用Express构建一个API服务器,它将与移动设备上的HTML5应用程序通信.我决定使用PostgreSQL,因为我的数据是"非常关系"的,而PostgreSQL新的JSON数据类型将使我的生活更轻松.
不幸的是,我找不到PostgreSQL的任何库利用新的JSON数据类型或暴露它.我想过使用Sequelize和一个很好的ORM或使用raw pgsql模块滚动我自己的东西.
有人能说清楚吗?我在一些NodeJS stackexchange上问过这个问题,但我认为我们没有具体的那个.
是否有可能获得所有重叠匹配,这些匹配从同一索引开始,但来自不同的匹配组?
例如,当我从"ABC"寻找模式"(A)|(AB)"时,正则表达式应该返回以下匹配:
(0,"A")和(0,"AB")
我想创建一个node.js和基于MySQL的应用程序.Google和Stack Overflow为Javascript ORM提供了许多选项:
但是,我找不到支持子查询,连接,转换,存储过程,与MySQL集群兼容的完美ORM,并且具有良好的文档和社区支持.
还有其他选择吗?在做出决定时我应该考虑哪些因素?
我正在使用 docker 和 knex 构建节点/快速服务进行数据库交互。我有一个env_file(在 docker-compose 文件中定义)定义了一些环境变量。该应用程序正在正确读取它们,因为 aconsole.log(process.env.DATABASE_USER);将记录正确的值。
我按照 knex 文档设置了一个 knexfile,如下所示:
module.exports = {
development: {
client: 'pg',
connection: {
host: process.env.DATABASE_HOST,
port: process.env.DATABASE_PORT,
user: process.env.DATABASE_USER,
password: process.env.DATABASE_PASSWORD,
database: process.env.DATABASE_NAME_DEV,
},
migrations: {
directory: __dirname + '/db/migrations',
},
seeds: {
directory: __dirname + '/db/seeds',
},
},
};
Run Code Online (Sandbox Code Playgroud)
如果我将这些值硬编码到 knexfile 中,一切都很好。我可以连接到数据库、运行迁移等。
当我使用环境变量(如上)时,它们返回未定义。这是为什么?
更新:
我的 docker compose 文件api.env只是一个基本的 .env 文件:
version: '3.3'
services:
db:
container_name: db
build:
context: ./services/api/src/db
dockerfile: Dockerfile
ports:
- 5435:5432
environment: …Run Code Online (Sandbox Code Playgroud) 我在使用Knex和SQLite用Node.js编写的程序中有以下一行:
await db.table("books")
.innerJoin("items", "items.id", "books.item_id")
.with("idx", db.raw(`instr(items.name, ?) asc`, name))
.where("idx > 0")
.orderBy("idx")
.select()
Run Code Online (Sandbox Code Playgroud)
db通过调用创建的变量在哪里knex(config)?但是,该函数raw(sql)似乎不起作用,因为它在运行时不断抛出此错误:
TypeError:Formatter.operator不允许使用“未定义”运算符(I:\ git \ server \ node_modules \ knex \ lib \ formatter.js:138:13)
在QueryCompiler_SQLite3.whereBasic(I:\ git \ server \ node_modules \ knex \ lib \ query \ compiler.js:525:100)
在QueryCompiler_SQLite3.where(I:\ git \ server \ node_modules \ knex \ lib \ query \ compiler.js:314:32)
我做错了什么?
如果相关的话,我正在用Typescript写作,正如您所看到的await,我正在使用ES6。但是,如果我排除,则此查询执行正常with(),并且with()拒绝接受不是由创建的内容raw()。
编辑:
如果我对此进行测试,则表明问题出在with()而不在raw():
console.log("name: " …Run Code Online (Sandbox Code Playgroud) node.js ×4
knex.js ×2
docker ×1
javascript ×1
json ×1
match ×1
migration ×1
node-orm2 ×1
overlapping ×1
postgresql ×1
python ×1
regex ×1
sails.js ×1
sequelize.js ×1
sqlite ×1
typescript ×1
waterline ×1