猫鼬 document.save 不起作用 [英] mongoose document.save not working

查看:34
本文介绍了猫鼬 document.save 不起作用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用 nodejs、mongo 和 mongoose 创建一个非常简单的论坛.

到目前为止,我为用户创建了一个 mongoose Schema:

var mongoose = require('mongoose');变量用户 = {_id: { type: String, required: true },密码:{ 类型:字符串,必填:真}};var schema = new mongoose.Schema(user);module.exports = 架构;module.exports.user = 用户;

然后创建模型:

var mongoose = require('mongoose');var url = 'mongodb://localhost:27017/forum'猫鼬.连接(网址);mongoose.connection.on('connected', function() {console.log('在' + url 上建立连接);});mongoose.connection.on('错误',函数(错误){console.log('发生错误:' + error);});mongoose.connection.on('disconnected', function() {console.log('连接关闭');});var User = mongoose.model('User', require('./user'));module.exports.User = 用户;

最后,有一个包含所有模型(目前只有一个)及其方法的文件:

var models = require('./models');var 用户 = 模型.用户export.addUser = 函数(用户,密码){var data = new User({_id: 用户, 密码: 密码 });数据.保存(功能(错误){console.log('里面');if(error) { console.log('ERROR: ' + error);返回真;}else { console.log('用户' + 用户 + '添加');返回假;}});};export.getUserList = function() {User.find().lean().exec(function(error, users) {if(error) { console.log('ERROR: ' + error);}else { 返回 JSON.stringify(users);}});}

执行此文件时出现问题:

var mongodb = require('mongodb');var mongoose = require('mongoose');var dm = require('./dm');var users = { 'user1': '1234','用户2':'1234','用户3':'1234','用户 4':'1234'};console.log('初始用户列表');dm.getUserList();for(var user in users) {dm.addUser(user, users[user]);}console.log('最终用户列表');dm.getUserList();进程.退出(0);

它似乎什么都不做,也没有拯救用户.输出:

初始用户列表最终用户名单

谢谢!

解决方案

删除 process.exit() 部分,或将其包装在超时中.您没有给数据库足够的时间来执行.例如.把它放在最后:

<预><代码>...setTimeout(() => process.exit(0), 2000);

或添加承诺,就像有人评论的那样:

exports.addUser = 函数(用户,密码){var data = new User({_id: 用户, 密码: 密码 });返回数据.save().then(() => console.log('用户' + 用户 + '添加')).catch(函数(错误){console.log('错误:' + 错误);否则 { 返回假;}});};

然后在你的主循环中:

const promises = users.map(userData => addUser(userData));Promise.all(承诺).then(() => {console.log('所有用户添加.');//.. 在这里做另一个异步操作,或者 process.exit();});

I am trying to create a very simple forum using nodejs, mongo and mongoose.

So far I created a mongoose Schema for users:

var mongoose = require('mongoose');

var user = {
  _id: { type: String, required: true },
  password: { type: String, required: true }
};

var schema = new mongoose.Schema(user);

module.exports = schema;
module.exports.user = user;

Then created the Model:

var mongoose = require('mongoose');

var url = 'mongodb://localhost:27017/forum'

mongoose.connect(url);

mongoose.connection.on('connected', function() {
    console.log('Stablished connection on ' + url);
});
mongoose.connection.on('error', function(error) {
    console.log('Something wrong happened: ' + error);
});
mongoose.connection.on('disconnected', function() {
    console.log('connection closed');
});

var User = mongoose.model('User', require('./user'));

module.exports.User = User;

Finally, there is the file that contains all the models (currently just one) and its methods:

var models = require('./models');

var User = models.User

exports.addUser = function(user, password) {
    var data = new User({ _id: user, password: password });
    data.save(function(error) {
        console.log('inside');
        if(error) { console.log('ERROR: ' + error); return true; }
        else { console.log('User ' + user + ' added'); return false; }
    });
};

exports.getUserList = function() {
    User.find().lean().exec(function(error, users) {
        if(error) { console.log('ERROR: ' + error); }
        else { return JSON.stringify(users); }
    });
}

The problem comes when I execute this file:

var mongodb = require('mongodb');
var mongoose = require('mongoose');

var dm = require('./dm');

var users = { 'user1': '1234',
              'user2': '1234',
              'user3': '1234',
              'user4': '1234'
            };

console.log('Initial user list');
dm.getUserList();
for(var user in users) {
    dm.addUser(user, users[user]);
}
console.log('Final user list');
dm.getUserList();
process.exit(0);

It seems that it does nothing and does not save the users. Output:

Initial user list
Final user list

Thanks!

解决方案

Remove the process.exit() part, or wrap it in a timeout. You don't give your database enough time to execute. E.g. put this at the end instead:

...
setTimeout(() => process.exit(0), 2000); 

Edit: or add promises, like somebody commented:

exports.addUser = function(user, password) {
  var data = new User({ _id: user, password: password });
  return data.save()
  .then(() => console.log('User ' + user + ' added'))
  .catch(function(error) {
    console.log('ERROR: ' + error);
    else {  return false; }
 });  
};

Then in your main loop:

const promises = users.map(userData => addUser(userData));
Promise.all(promises)
.then(() => {
  console.log('All users added.');
  // .. do another async operation here, or process.exit();
});

这篇关于猫鼬 document.save 不起作用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆