首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >猫鼬“断开不是一种功能”

猫鼬“断开不是一种功能”
EN

Stack Overflow用户
提问于 2018-01-27 22:07:05
回答 2查看 3.6K关注 0票数 2

我使用本教程来创建一个节点/mongo应用程序。当我运行addContact时,似乎联系人保存到DB中,但是,我看到一个错误,即断开连接函数不是函数。有谁能告诉我为什么会发生这种事,以及如何解决?我假设常量db的作用域有问题

代码:

代码语言:javascript
复制
const mongoose = require('mongoose'); 
const assert = require('assert'); 
mongoose.Promise = global.Promise; 


const db = mongoose.connect('mongodb://localhost:27017/contact-manager');


function toLower(v) {
  return v.toLowerCase();
}

const contactSchema = mongoose.Schema({
  firstname: { type: String, set: toLower },
  lastname: { type: String, set: toLower },
  phone: { type: String, set: toLower },
  email: { type: String, set: toLower }
});


const Contact = mongoose.model('Contact', contactSchema);

const addContact = (contact) => {
  Contact.create(contact, (err) => {
    assert.equal(null, err);
    console.info('New contact added');
    db.disconnect();
  });
};

const getContact = (name) => {
  const search = new RegExp(name, 'i');
  Contact.find({$or: [{firstname: search }, {lastname: search }]})
  .exec((err, contact) => {
    assert.equal(null, err);
    console.info(contact);
    console.info(`${contact.length} matches`);
    db.disconnect();
  });
};

module.exports = {  addContact, getContact };

代码part2:

代码语言:javascript
复制
const program = require('commander');

const {addContact, getContact} = require('./logic');

program
  .version('0.0.1')
  .description('Contact management system');

program
  .command('addContact <firstame> <lastname> <phone> <email>')
  .alias('a')
  .description('Add a contact')
  .action((firstname, lastname, phone, email) => {
    addContact({firstname, lastname, phone, email});
  });

program
  .command('getContact <name>')
  .alias('r')
  .description('Get contact')
  .action(name => getContact(name));

program.parse(process.argv);

错误:

代码语言:javascript
复制
New contact added
/Users/user/contact-manager/node_modules/mongodb/lib/utils.js:132
      throw err;
      ^

TypeError: db.disconnect is not a function
    at Contact.create (/Users/user/contact-manager/logic.js:33:8)
    at Function.<anonymous> (/Users/user/contact-manager/node_modules/mongoose/lib/model.js:3913:16)
    at parallel (/Users/user/contact-manager/node_modules/mongoose/lib/model.js:2077:12)
    at /Users/user/contact-manager/node_modules/async/internal/parallel.js:35:9
    at /Users/user/contact-manager/node_modules/async/internal/once.js:12:16
    at iteratorCallback (/Users/user/contact-manager/node_modules/async/eachOf.js:52:13)
    at /Users/user/contact-manager/node_modules/async/internal/onlyOnce.js:12:16
    at /Users/user/contact-manager/node_modules/async/internal/parallel.js:32:13
    at apply (/Users/user/contact-manager/node_modules/lodash/_apply.js:15:25)
    at /Users/user/contact-manager/node_modules/lodash/_overRest.js:32:12
    at callbackWrapper (/Users/user/contact-manager/node_modules/mongoose/lib/model.js:2046:11)
    at /Users/user/contact-manager/node_modules/mongoose/lib/model.js:3913:16
    at model.$__save.error (/Users/user/contact-manager/node_modules/mongoose/lib/model.js:342:7)
    at /Users/user/contact-manager/node_modules/kareem/index.js:297:21
    at next (/Users/user/contact-manager/node_modules/kareem/index.js:209:27)
    at Kareem.execPost (/Users/user/contact-manager/node_modules/kareem/index.js:217:3)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-01-27 22:23:40

据我所知,mongoose.connect不会返回一个值,从入门指南中给出的代码可以看出这一点。如果要关闭数据库连接,则需要调用mongoose.connection上的mongoose.connection方法,该方法在使用mongoose.connect打开连接时被写入。最简单的方法是将mongoose.connect移动到自己的行:

代码语言:javascript
复制
mongoose.connect('mongodb://localhost:27017/contact-manager');
const db = mongoose.connection;

然后将对db.disconnect()的调用替换为对db.close()的调用。

票数 9
EN

Stack Overflow用户

发布于 2018-01-27 22:20:53

尝试让猫鼬使用mongoose.connection.close()处理连接闭包

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48481040

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档