在mongoose中级联创build/删除集合的好方法
第一个或第二个收集是删除收集的正确方法?
我觉得这是第二个,但第一个更容易使用。 是否可以使用承诺来缓解代码的读取?
第一种方法:
beforeEach((done) => { //Before each test we empty the database //Remove Roles Role.remove({}, (err) => {}); //Remove Users User.remove({}, (err) => {}); // Remove Workouts Workout.remove({}, (err) => {}); // Create user Role.create({"name" : "Administrator"},(err, adminRole) => { User.create({ firstname : "***", businessId: "1", lastname : "***", email : "***", roles:[adminRole]}, (err) => { done(); }); }); });`
第二种方式:
beforeEach((done) => { //Before each test we empty the database //Remove Roles Role.remove({}, (err) => { //Remove Users User.remove({}, (err) => { // Remove Workouts Workout.remove({}, (err) => { // Create user Role.create({"name" : "Administrator"},(err, adminRole) => { User.create({ firstname : "***", businessId: "1", lastname : "***", email : "***", roles:[adminRole]}, (err) => { done(); }); }); }); }); }); });
第二个select是最安全的,因为如果在操作中发生错误,则不执行下一个。
当然你应该使用承诺。 代码变得更清洁:
Role.remove({}) .then(() => User.remove({}) .then(() => Workout.remove({}) .then(() => Role.create({"name" : "Administrator"}) .then((adminRole) => User.create({ firstname : "***", businessId: "1", lastname : "***", email : "***", roles:[adminRole]}) .then(() => done()) .catch((error) => ...);
为了能够使用承诺,你可以将mongoose的promise
设置为本地promise
(只要你的节点版本> = 6):
mongoose.Promise = global.Promise;
- mongoosefindOne范围怀疑
- MongoError:TypeError:使用$或者不能读取未定义的属性“id”
- 无法连接到MongoClient.connect内的Redis
- 如何从模板引擎中轻松访问MongoDB ObjectIddate?
- 使用MongoDB设置Angular / Ionic移动应用程序
- 如何将HTML中的select选项与两个预定义的值绑定,以在mongodb中插入数据
- Gruntjs – 以特定顺序运行多个阻塞任务(Mongo&Node.js)
- 我使用auth0进行用户身份validation,并且我有一个针对CRUDpost(title,img,desc)的API。 如何进行CRUD API的authentication调用?
- Mongoose – 函数内.find方法不传递结果