MongoDB 与 Koa JS: client.connect 不是函数
MongoDB with Koa JS: client.connect is not a function
我正在尝试使用 Koa 开发我的第一个简单应用程序,它只接收一些数据并将其放入 Mongo 数据库中。但是,我发现连连接到数据库都很困难,因为我得到的响应是 {"error": "this.db_client.connect is not a function"}
。这是应用程序代码:
import Koa from "koa";
import bodyParser from "koa-bodyparser";
import {DBHandler} from "./db"
import {error} from "./middlewares/error";
const app = new Koa();
app.use(bodyParser());
app.use(error);
app.use(async ctx => {
const db = new DBHandler();
db.writeEntity(ctx.request.body);
});
app.listen(3000);
DBHandler:
export class DBHandler {
constructor() {
this.db_url = "mongodb://localhost:27017";
this.db_client = new MongoClient(this.db_url, {useNewUrlParser: true, useUnifiedTopology: true});
}
writeEntity = (entity) => {
console.log(this.db_client);
this.db_client.connect((err, client) => {
if (err) throw new Error("Connection Error");
const db = client.db("database");
const collection = db.collection("users");
collection.insertOne(entity, (err, res) => {
if (err) throw new Error("Insertion Error");
console.log(res.ops);
client.close;
});
});
};
}
顺便说一句,console.log(this.db_client)
输出 Promise { <pending> }
,这意味着,我的 MongoClient 对象是一个承诺!
有什么想法、发生了什么以及如何让它发挥作用吗?
由于您通过评论确认您正在导入 MogoClient
,如下所示:
import MongoClient from "mongodb";
我可以确认问题出在哪里,MongoClient
不是 mongodb
模块的直接导出,而是子导出。你应该像这样导入它:
import mongodb from "mongodb";
const MongoClient = mongodb.MongoClient;
// Or using require
const MongoClient = require("mongodb").MongoClient;
这应该可以解决问题。
您可以阅读有关使用 MongoClient
class here.
连接到 MongoDB 的更多信息
我正在尝试使用 Koa 开发我的第一个简单应用程序,它只接收一些数据并将其放入 Mongo 数据库中。但是,我发现连连接到数据库都很困难,因为我得到的响应是 {"error": "this.db_client.connect is not a function"}
。这是应用程序代码:
import Koa from "koa";
import bodyParser from "koa-bodyparser";
import {DBHandler} from "./db"
import {error} from "./middlewares/error";
const app = new Koa();
app.use(bodyParser());
app.use(error);
app.use(async ctx => {
const db = new DBHandler();
db.writeEntity(ctx.request.body);
});
app.listen(3000);
DBHandler:
export class DBHandler {
constructor() {
this.db_url = "mongodb://localhost:27017";
this.db_client = new MongoClient(this.db_url, {useNewUrlParser: true, useUnifiedTopology: true});
}
writeEntity = (entity) => {
console.log(this.db_client);
this.db_client.connect((err, client) => {
if (err) throw new Error("Connection Error");
const db = client.db("database");
const collection = db.collection("users");
collection.insertOne(entity, (err, res) => {
if (err) throw new Error("Insertion Error");
console.log(res.ops);
client.close;
});
});
};
}
顺便说一句,console.log(this.db_client)
输出 Promise { <pending> }
,这意味着,我的 MongoClient 对象是一个承诺!
有什么想法、发生了什么以及如何让它发挥作用吗?
由于您通过评论确认您正在导入 MogoClient
,如下所示:
import MongoClient from "mongodb";
我可以确认问题出在哪里,MongoClient
不是 mongodb
模块的直接导出,而是子导出。你应该像这样导入它:
import mongodb from "mongodb";
const MongoClient = mongodb.MongoClient;
// Or using require
const MongoClient = require("mongodb").MongoClient;
这应该可以解决问题。
您可以阅读有关使用 MongoClient
class here.