我有一个使用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可以工作