简体   繁体   English

如何在 Node.js 中要求我的自定义 class?

[英]How do I require my custom class in Node.js?

I have database.js where my Database class is.我有database.js ,我的Database class 在哪里。

database.js数据库.js

class Database {
    constructor() {
        this.uri = "mongodb+srv: ....."
    }
    get_uri = () => {
        return this.uri
    }
    connect = async client => {
        await client.connect();
        console.log("Successfully connected!")
        return client;
    }

    disconnect = async client => {
        await client.close();
    }
}

exports.Database = new Database()

server.js服务器.js

const {MongoClient} = require('mongodb');
const db = require("./server/database");
const connect = db.connect(); // TypeError: db.connect is not a function

files

server -|
        |-database.js

package.json
server.js

printed db variable for my code above为我上面的代码printed db variable

[0] Database object:
[0] {
[0]   Database: Database {
[0]     get_uri: [Function: get_uri],
[0]     connect: [AsyncFunction: connect],
[0]     disconnect: [AsyncFunction: disconnect],
[0]     uri: 'mongodb+srv:......'
[0]   }
[0] }

EDIT 1编辑 1

Soulka, just done this: Soulka,刚刚做了这个:

const {MongoClient} = require('mongodb');
const { Database } = require("./server/database");
const connect = Database.connect();

and still TypeError: Cannot read property 'connect' of undefined仍然是TypeError: Cannot read property 'connect' of undefined

But it raises an error, which I put as a comment above.但它引发了一个错误,我将其作为评论放在上面。 What I am doing wrong?我做错了什么?

Thank you!谢谢!

Your import should be const { Database } = require("./server/database");您的导入应该是const { Database } = require("./server/database"); instead of const db = require("./server/database");而不是const db = require("./server/database");

This is because you are exporting via exports.Database =.. not exports =...这是因为您是通过exports.Database =..而不是exports =...

EDIT (for your edit): I'm not sure if it makes a difference, but you should think about using a singleton like this:编辑(用于您的编辑):我不确定它是否有所作为,但您应该考虑使用这样的 singleton:

class Database {
    constructor() {
        this.uri = "mongodb+srv: ....."
    }

    static get instance() {
        if (!Database._instance) Database._instance = new Database();
        return Database._instance;
    }

    get_uri = () => {
        return this.uri
    }
    connect = async client => {
        await client.connect();
        console.log("Successfully connected!")
        return client;
    }

    disconnect = async client => {
        await client.close();
    }
}

exports.Database = Database

And then in server.js然后在 server.js

const {MongoClient} = require('mongodb');
const { Database }= require("./server/database");
const db = Database.instance;
const connect = db.connect( someClientMustGoHere ); // <---- THIS LINE

EDIT 2: Fixed the last line of server.js to be const connect = db.connect( someClientMustGoHere );编辑 2:将 server.js 的最后一行修复为const connect = db.connect( someClientMustGoHere );

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM