mongodb - 无法使用 MongoDB 配置 Keystone 6

标签 mongodb keystonejs keystonejs6

我正在尝试使用 MongoDB 作为数据库来设置 Keystone。运行 keystone-next 时,命令出错并显示以下错误消息:错误:数据库配置无效。请在 getDBProvider 中将 db.provider 指定为“sqlite”或“postgresql”

他们的文档没有明确说明要将哪些值作为 db.provider 传递以将 MongoDB 用作数据库。

keystone.ts 的内容如下:

import { config, createSchema } from '@keystone-next/keystone/schema'
import 'dotenv/config'

const databaseUrl =
  process.env.DATABASE_URL || 'mongodb://localhost/keystone-project'

const sessionConfig = {
  maxAge: 60 * 60 * 24 * 90,
  secret: process.env.COOKIE_SECRET || 'keystone-project-secret'
}

export default config({
  server: {
    cors: {
      origin: [process.env.FRONTEND_URL],
      credentials: true
    }
  },
  db: {
    provider: 'mongoose',
    url: databaseUrl
    // TODO: add data seeding here
  },
  lists: createSchema({
    // Schema items go here
  }),
  ui: {
    // Change this for roles}
    isAccessAllowed: () => true
  }
  // Add session values here
})

以下是来自 package.json 的项目依赖项:

{
...
"dependencies": {
    "@keystone-next/admin-ui": "^14.1.3",
    "@keystone-next/auth": "^31.0.0",
    "@keystone-next/cloudinary": "^6.0.6",
    "@keystone-next/fields": "^14.0.0",
    "@keystone-next/keystone": "^24.0.1",
    "@keystone-next/types": "^24.0.0",
    "@keystonejs/server-side-graphql-client": "^2.1.2",
    "@types/nodemailer": "^6.4.4",
    "dotenv": "^10.0.0",
    "next": "^11.1.0",
    "nodemailer": "^6.6.3",
    "react": "^17.0.2",
    "react-dom": "^17.0.2",
    "stripe": "^8.169.0"
  },
  "devDependencies": {
    "@babel/preset-env": "^7.15.4",
    "@babel/preset-react": "^7.14.5",
    "@babel/preset-typescript": "^7.15.0",
    "@types/node": "^16.7.10",
    "@typescript-eslint/eslint-plugin": "^4.29.2",
    "@typescript-eslint/parser": "^4.29.2",
    "babel-eslint": "^10.1.0",
    "eslint": "^7.32.0",
    "eslint-config-airbnb": "^18.2.1",
    "eslint-config-airbnb-typescript": "^12.3.1",
    "eslint-config-prettier": "^7.2.0",
    "eslint-plugin-html": "^6.1.2",
    "eslint-plugin-import": "^2.24.0",
    "eslint-plugin-jsx-a11y": "^6.4.1",
    "eslint-plugin-prettier": "^3.4.0",
    "eslint-plugin-react": "^7.24.0",
    "eslint-plugin-react-hooks": "^4.2.0",
    "prettier": "^2.3.2",
    "typescript": "^4.3.5"
  },
...
}

最佳答案

Keystone 6(您在这里使用的版本)尚不支持 Mongo。您需要指定 PostgreSQL (postgresql) 或 SQLite (sqlite) 作为数据库提供程序。

版本 6 切换到使用 Prisma作为底层 ORM 层,为团队提供一致的方式来访问不同的数据库平台,并让我们专注于更高级别的功能。

Prisma 团队正在努力添加 Mongo 支持,该功能最近已发布 released as a preview .然而,某些功能(程序化数据库创建和我认为的其他一些功能)正在阻止它与 Keystone 一起使用。 PR #6102跟踪 Keystone 方面的进度或 #1277在 Prisma 项目中。我无法提供和估计这将在何时落地,但它正在积极推进中。

关于mongodb - 无法使用 MongoDB 配置 Keystone 6,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69058089/

相关文章:

node.js - 有没有办法在 Keystone.js 中隐藏 ID 列?

javascript - KeystoneJS - 创建新项目抛出重复键错误

javascript - Keystone 6 自定义架构 - 突变不起作用 - 超出最大调用堆栈大小

javascript - 语法错误: Unexpected end of input at Module._compile

node.js - 如何获取 Mongoose 数组中最后一个元素的数据?

c# - 如何使用 C# 连接 MongoDB 中一个表包含另一个表的 ID 列表的两个表

node.js - Mongoose $text 字段错误

node.js - keystoneJS 不会运行默认的 css