![](/img/trans.png)
[英]Cannot read property 'collection' of undefined MongoDB nodejs driver
[英]MongoDB and NodeJS cannot create collection
所以我在大約 8 個月前使用了這個確切的代碼,它工作得很好,現在突然這種設置方式似乎不起作用。 我無法在這里找到問題所在,而且似乎數據庫根本沒有連接。 有沒有更好的方法來解決這個問題?
'use strict' const express = require('express'); const MongoClient = require('mongodb').MongoClient; const url = 'mongodb://toor:root@mongodbdatabase:27017/' const app = express(); const PORT = 8080; const HOST = '0.0.0.0'; let con; MongoClient.connect(url, (err, db) => { con = db.db("mongodbdatabase"); }) app.use('/', express.static('public')); app.get('/createDatabase', (req, res) => { con.createCollection("HiveDB", function(err, result) { if (err) throw err; console.log("Collection Created") }) res.send(); }) console.log(`Listening on port ${PORT}`) app.listen(PORT, HOST);
這是我在導航到 localhost:83/createDatabase 時遇到的錯誤
TypeError: Cannot read properties of undefined (reading 'createCollection')
at /usr/src/app/server.js:28:9
at Layer.handle [as handle_request] (/usr/src/app/node_modules/express/lib/router/layer.js:95:5)
at next (/usr/src/app/node_modules/express/lib/router/route.js:144:13)
at Route.dispatch (/usr/src/app/node_modules/express/lib/router/route.js:114:3)
at Layer.handle [as handle_request] (/usr/src/app/node_modules/express/lib/router/layer.js:95:5)
at /usr/src/app/node_modules/express/lib/router/index.js:284:15
at Function.process_params (/usr/src/app/node_modules/express/lib/router/index.js:346:12)
at next (/usr/src/app/node_modules/express/lib/router/index.js:280:10)
at SendStream.error (/usr/src/app/node_modules/serve-static/index.js:121:7)
at SendStream.emit (node:events:537:28)
我也在使用 docker compose 運行
Dockerfile:
FROM node:latest
EXPOSE 8080
WORKDIR /usr/src/app
RUN npm install express --save
RUN npm install mongodb --save
RUN npm install -g loadtest --save
COPY server.js /usr/src/app/server.js
COPY /public /usr/src/app/public
CMD ["node", "server.js"]
碼頭工人-compose.yml:
version: '3'
services:
mainserver:
build: ./main
depends_on:
- mongodbdatabase
container_name: mainServer
ports:
- "83:8080"
mongodbdatabase:
image: mongo
container_name: monDataBase
ports:
- 27017:27017
environment:
MONGO_INITDB_ROOT_USERNAME: toor
MONGO_INITDB_ROOT_PASSWORD: root
我將引導您從 mongodb 客戶端 github 自述文件中查看相關文檔
在您粘貼的代碼片段中,您使用MongoClient
連接設置con
變量,但是如果連接失敗(並且提供了err
)怎么辦? 所以分配給con
可能失敗了,這就是它在路由器上下文中undefined
的原因。
我建議從我提供的鏈接中復制並粘貼示例。
使用 async/await 語法,您可以將 mongodb 客戶端提供給路由處理程序。
這是使用您的示例的代碼片段:
'use strict'
const express = require('express');
const MongoClient = require('mongodb').MongoClient;
const url = 'mongodb://toor:root@mongodbdatabase:27017/'
const app = express();
const PORT = 8080;
const HOST = '0.0.0.0';
async function init() {
try{
const client = await new MongoClient(url).connect()
}catch(err) {
console.error(err.message)
}
const db = client.db("HiveDB")
app.use('/', express.static('public'));
app.get('/createDatabase', (req, res) => {
db.createCollection("HiveDB", function(err, result) {
if (err) throw err;
console.log("Collection Created")
})
res.send();
})
app.listen(PORT, HOST,()=>{
console.log(`Listening on port ${PORT}`)
});
}
init()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.