【发布时间】:2022-01-04 21:44:42
【问题描述】:
我有一个 Next.js 应用程序。我对 Mongodb 有一个错误。我有一段时间无法解决这个问题。这就是为什么我想问你们。我希望我们能解决它。这对我来说非常重要。首先我会给你我的 server.js 代码,然后我会从控制台给你错误消息。
Server.js 文件代码:
const express = require('express')
const next = require('next')
const mongoose = require('mongoose')
require('dotenv/config')
const dev = process.env.NODE_ENV !== 'production'
const app = next({ dev })
const handle = app.getRequestHandler()
const port = process.env.SERVER_PORT || 3000
mongoose.connect(process.env.DATABASE,{
useNewUrlParser: true,
useUnifiedTopology: true,
})
.then(() => {
console.log('DB connected!')
const port = process.env.PORT || 3000
app.prepare().then(()=>{
const server = express()
//ROUTES
server.use(express.json())
server.get('*', (req, res) => handle(req, res))
server.listen(port, (err) => {
if(err) throw err
console.log(`Server listen on http://127.0.0.1:${port}`)
})
})
})
.catch((err) => {
console.log('DB ERROR:', err)
})
控制台上的错误信息:
DB ERROR: MongooseError: The `uri` parameter to `openUri()` must be a string, got "undefined". Make sure the first parameter to `mongoose.connect()` or `mongoose.createConnection()` is a string.
at NativeConnection.Connection.openUri (/home/ubuntu/nodeApps/mywebsite-next/node_modules/mongoose/lib/connection.js:684:11)
at /home/ubuntu/nodeApps/mywebsite-next/node_modules/mongoose/lib/index.js:332:10
at /home/ubuntu/nodeApps/mywebsite-next/node_modules/mongoose/lib/helpers/promiseOrCallback.js:32:5
at new Promise (<anonymous>)
at promiseOrCallback (/home/ubuntu/nodeApps/mywebsite-next/node_modules/mongoose/lib/helpers/promiseOrCallback.js:31:10)
at Mongoose._promiseOrCallback (/home/ubuntu/nodeApps/mywebsite-next/node_modules/mongoose/lib/index.js:1158:10)
at Mongoose.connect (/home/ubuntu/nodeApps/mywebsite-next/node_modules/mongoose/lib/index.js:331:20)
at Object.<anonymous> (/home/ubuntu/nodeApps/mywebsite-next/server.js:11:10)
at Module._compile (node:internal/modules/cjs/loader:1101:14)
at Object.Module._extensions..js (node:internal/modules/cjs/loader:1153:10)
我的 env 文件中有 Mongodb 的链接。也许是由于这种情况导致的错误?
DATABASE=mongodb+srv://myusername:mypassword@cluster0.u4slu.mongodb.net/mydbusername?retryWrites=true&w=majority
【问题讨论】:
-
如果您在执行
mongoose.connect之前console.log(process.env.DATABASE),它是否解析为具有正确值的用户名、数据库、dbusername 等的完整形式的字符串?你是真正的 .env 已经填写了所有这些值吗?您只需将它们替换为以在此处发布时保护它们吗? -
当我这样做时,我看到 Mongodb 的链接就像写在 env 文件中一样。
-
是的,您实际上需要将
替换为实际用户名,将 替换为实际密码等等,这些不会自动为您填写。那么incbeatz的答案是正确的。 -
伙计,加油!我没有在问题中写下真实的用户名和密码...
标签: javascript node.js mongodb mongoose next.js