猫鼬应要求关闭连接

时间:2019-06-26 21:28:03

标签: node.js mongodb typescript express mongoose

我有一个使用express和mongoose的节点应用程序。它可以很好地连接,但是当我尝试在数据库中进行读取或写入时,该函数不会结束,不会引发任何错误并且不会修改数据库

我的环境是:

Xubuntu 19.04,

节点v11.15.0,

Mongod 3.6.8,

纱线1.16.0,

猫鼬^ 5.6.1,

@ types /猫鼬^ 5.5.6,

打字稿^ 3.5.2。

我已经在访问数据库之前尝试连接,但是同样发生

在这里我将服务器与mongo连接起来

const MONGO_HOSTNAME = 'localhost';
const MONGO_PORT = '27017';
const MONGO_DB = 'database';
const url = `mongodb://${MONGO_HOSTNAME}:${MONGO_PORT}/${MONGO_DB}`;

const db = mongoose.connection;

db.on('error', () => { console.log('connection error') });
db.on('connected', () => {
    console.log('mongodb connected');
    console.log(`${db.readyState}`);
});
db.on('disconnected', () => { console.log('mongodb disconnected') });
db.on('close', () => { console.log('mongodb closed') });

mongoose.connect(url, { useNewUrlParser: true, useFindAndModify: false });

我的查询:

server.post('/signup',(req: any, res: any, done: any) {
    const username: string = req.body['username'];
    const email: string = req.body['email'];
    const password: string = req.body['password'];
    console.log(db.readyState);
    bcrypt.hash(password, 10, (err, hash) => {
        if (err) {
            console.log(err);
            res.status(501).send('Error');
        } else {
            const admin = new adminSchema({
                'username': username,
                'email': email,
                'password': hash,
            });
            console.log('Calling save');
            admin.save(function (err) {
                if (err) {
                    console.log(err);
                    res.status(501).send('Error');
                }
                else {
                    console.log('Created!');
                    res.send(admin);
                }
            });
            console.log('After saving');
        }
    });
});

这是我的计划

import { Schema, Document, Mongoose } from 'mongoose';

export interface IAdmin extends Document {
    email: string,
    username: string,
    password: string,
    linkedUserID: string
};

var AdminSchema: Schema = new Schema({
    username: String,
    email: String,
    password: String,
    linkedUserID: String
});

export default new Mongoose().model<IAdmin>('Admin', AdminSchema);

我希望创建用户,响应是admin实例,日志是:

mongodb connected
1
1
Calling save
After saving
Created!

但是既没有创建用户也没有创建集合,客户端没有任何响应,并且日志是:

mongodb connected
1
0
Calling save
After saving

编辑1:

我尝试在poolSize属性中设置一个更大的数字,并为更大的数字建立一个reconnectTries,但是那没有用。这是我用来尝试的代码:

mongoose.connect(url, {
    useNewUrlParser: true,
    poolSize: 40,
    reconnectTries: 1000,
    reconnectInterval: 100,
}, (err) => {
    console.log(`Error:\n${err}`);
});

该代码的输出为:

mongodb connected
1
Error:
null
0
Calling save
After saving

编辑2:

我能够使用mongo shell和mongo罗盘创建文档

编辑3:

在使用mongo 4.0.10的Atlas集群中也会发生同样的情况

**编辑4:**

使用mongodb代替mongoose可以工作

0 个答案:

没有答案