我是一个新手,遇到一个难题,还请大家进来帮助我一下,不胜感激
发布于 10 年前 作者 zhubj 5601 次浏览 最后一次编辑是 8 年前 来自 问答

背景:我想做一个个人博客网站 目的:学习nodejs+mongodb等web开发技术 个人水平:2012年毕业,12-14年都是做的Linux 上面的Netfilter的开发 14年来到上海,做了一名 salesforce的developer,当然,做这种基于平台的二次开发,我发现自己有太多的web知识要学习 像jquery,html, 还有对web开发的整体概念…等等,感觉自己是个小学生了.

环境: 系统是Mac

node : v0.12.0
nongodb:v3.0.0
├── connect-flash@0.1.1
├─┬ connect-mongo@0.8.0
│ ├─┬ debug@2.1.3
│ │ └── ms@0.7.0
│ ├── depd@1.0.0
│ └── lodash@3.6.0
├── ejs@2.3.1
├─┬ express@3.4.8
│ ├── buffer-crc32@0.2.1
│ ├─┬ commander@1.3.2
│ │ └── keypress@0.1.0
│ ├─┬ connect@2.12.0
│ │ ├── batch@0.5.0
│ │ ├── bytes@0.2.1
│ │ ├─┬ multiparty@2.2.0
│ │ │ ├─┬ readable-stream@1.1.13
│ │ │ │ ├── core-util-is@1.0.1
│ │ │ │ ├── inherits@2.0.1
│ │ │ │ ├── isarray@0.0.1
│ │ │ │ └── string_decoder@0.10.31
│ │ │ └── stream-counter@0.2.0
│ │ ├── negotiator@0.3.0
│ │ ├── pause@0.0.1
│ │ ├── qs@0.6.6
│ │ ├── raw-body@1.1.2
│ │ └── uid2@0.0.3
│ ├── cookie@0.1.0
│ ├── cookie-signature@1.0.1
│ ├── debug@0.8.1
│ ├── fresh@0.2.0
│ ├── merge-descriptors@0.0.1
│ ├── methods@0.1.0
│ ├── mkdirp@0.3.5
│ ├── range-parser@0.0.4
│ └─┬ send@0.1.4
│   └── mime@1.2.11
├── express-partials@0.3.0
└─┬ mongodb@2.0.25
  ├─┬ mongodb-core@1.1.21
  │ ├─┬ bson@0.3.1
  │ │ └─┬ bson-ext@0.1.0
  │ │   └── nan@1.7.0
  │ ├─┬ kerberos@0.0.10
  │ │ └── nan@1.7.0
  │ ├─┬ mkdirp@0.5.0
  │ │ └── minimist@0.0.8
  │ └── rimraf@2.2.6
  └─┬ readable-stream@1.0.31
    ├── core-util-is@1.0.1
    ├── inherits@2.0.1
    ├── isarray@0.0.1
    └── string_decoder@0.10.31

代码是我在github上clone的,源码地址 https://github.com/shanelau/NodeJs-Blog ** 问题:** 1,页面上有一个注册的表单提交,输入用户名和密码,点击注册,执行save

var mongodb = require('./../db')
   , format = require('util').format;
function User(user) {
   this.name = user.name;
   this.password = user.password;
};
module.exports = User;
User.prototype.save = function save(callback) {
// 存入 Mongodb 的文档
   var user = {
       name: this.name,
       password: this.password
   };
   mongodb.open(function(err, db) {
       if (err) {
           console.log(format("err = %s", err));
           return callback(err);
       }
// 读取 users 集合
       db.collection('users', function(err, collection) {
           if (err) {
               console.log(format("err = %s", err));
               mongodb.close();
               return callback(err);
           }
// 为 name 属性添加索引
           collection.ensureIndex('name', {unique: true},{w:1});
// 写入 user 文档
           collection.insert(user, {safe: true}, function(err, user) {
               mongodb.close();
               console.log(format("err = %s", err)); 
               callback(err, user);
           });
       });
   });

};

结果: 用户是注册成功了,我去数据库查看确实有这么一个刚注册的用户,但是 我的APP挂掉了 报错信息如下:

{ username: '9', password: '9', password_repeat: '9' }
POST /reg 302 229ms - 58b
err = MongoError: Cannot use a writeConcern without a provided callback

/Users/zhubaojun/GitHub/devBlog/node_modules/mongodb/lib/utils.js:99
      throw err; 
            ^
Error
    at Object.<anonymous> (/Users/zhubaojun/GitHub/devBlog/node_modules/mongodb/node_modules/mongodb-core/lib/error.js:42:24)
    at Module._compile (module.js:460:26)
    at Object.Module._extensions..js (module.js:478:10)
    at Module.load (module.js:355:32)
    at Function.Module._load (module.js:310:12)
    at Module.require (module.js:365:17)
    at require (module.js:384:17)
    at Object.<anonymous> (/Users/zhubaojun/GitHub/devBlog/node_modules/mongodb/node_modules/mongodb-core/index.js:2:17)
    at Module._compile (module.js:460:26)
    at Object.Module._extensions..js (module.js:478:10)

其中err = MongoError: Cannot use a writeConcern without a provided callback 是我在 node_modules/mongodb/lib/utils.js 种这个函数里面加了一个报错信息

console.log(format("err = %s", err));

,才报这条错误信息的

var format = require('util').format;
var handleCallback = function(callback, err, value1, value2) {
  try {
    if(callback == null) return;
    if(value2) return callback(err, value1, value2);
    return callback(err, value1);
  } catch(err) {
    process.nextTick(function() { 
      console.log(format("err = %s", err));
      throw err; 
    });
    return false;
  }

  return true;
}

我去Google上搜索,是需要一个callback函数,我想不出在哪里添加,因为看代码我觉得callback函数已经添加了 请问该怎么追踪错误和 修改代码,谢谢

3 回复
// 为 name 属性添加索引
collection.ensureIndex('name', {unique: true},{w:1}, function (err) {
  callback(err);
});

@hezedu 那个地方加了,还是报同样错误,其实程序挂掉之前,数据库里面插入成功了 自豪地采用 CNodeJS ionic

@zhubj

// 为 name 属性添加索引
collection.ensureIndex({name:1}, {unique: true}, function (err) {
  callback(err);
});
回到顶部