zoukankan      html  css  js  c++  java
  • nodejs运行项目报错TypeError: db.collection is not a function

    nodejs调用mongodb驱动写入数据异常

    nodejs 版本:v8.9.4
    mongodb 版本:3.4.7

    问题描述:

    使用nodejs,连接mongodb,数据写入时提示如下错误:

    $ node insertdb.js
    连接成功![object Object]
    e:	est
    ode_modules\_mongodb@3.0.1@mongodblibmongo_client.js:797
              throw err;
              ^
    
    TypeError: db.collection is not a function
        at insertData (e:	estinsertdb.js:9:25)
        at e:	estinsertdb.js:25:5
        at args.push (e:	est
    ode_modules\_mongodb@3.0.1@mongodblibutils.js:404:72)
        at e:	est
    ode_modules\_mongodb@3.0.1@mongodblibmongo_client.js:255:5
        at connectCallback (e:	est
    ode_modules\_mongodb@3.0.1@mongodblibmongo_client.js:933:5)
        at e:	est
    ode_modules\_mongodb@3.0.1@mongodblibmongo_client.js:794:11
        at _combinedTickCallback (internal/process/next_tick.js:131:7)
        at process._tickCallback (internal/process/next_tick.js:180:9)
    
    

    问题分析:

    1、根据错误提示:TypeError: collection is not a function 说明函数:collection未找到。
    2、从错误堆栈中,定位到node的lib目录,结构如下:
    这里写图片描述
    3、错误堆栈中,仅定位到 mongo_client.js,还没有到数据库一级就出现异常了。
    4、打开文件collection.js,搜索collection方法,找到如下代码示例片段,原来mongodb 3.x版本的库文件与2.x版本的不一样,按照示例修改就可以了:
    这里写图片描述

    示例代码:

    // mongodb 
    // 插入数据
    var MongoClient = require('mongodb').MongoClient;
    var url = 'mongodb://localhost:30000/runoob';
    var dbName = 'runnoob';
    
    var insertData = function(db, callback) {  
        //连接到表 site
        var collection = db.collection('site');
        //插入数据
        var data = [{"name":"菜鸟教程","url":"www.runoob.com"},{"name":"菜鸟工具","url":"c.runoob.com"}];
        collection.insert(data, function(err, result) { 
            if(err)
            {
                console.log('Error:'+ err);
                return;
            }     
            callback(result);
        });
    }
    
    /*连接方式1:错误
    MongoClient.connect(url, function(err, db) {
        console.log("连接成功!" + db);
        insertData(db, function(result) {
            console.log(result);
            db.close();
        });
    });
    */
    
    /* 连接方式2:正确*/
    MongoClient.connect(url, function(err, client) {
        console.log("连接成功!" + client);
    	var db = client.db(dbName)
        insertData(db, function(result) {
            console.log(result);
            client.close();
        });
    });

     
  • 相关阅读:
    洛谷 题解 P5595 【【XR-4】歌唱比赛】
    洛谷 题解 CF1151D 【Stas and the Queue at the Buffet】
    洛谷 题解 CF299A 【Ksusha and Array】
    仙人掌找环
    2-SAT
    带花树
    帮我背单词
    csp2019退役祭
    P5284 [十二省联考2019]字符串问题 题解
    【网络流24题】魔术球问题
  • 原文地址:https://www.cnblogs.com/qianzf/p/14235604.html
Copyright © 2011-2022 走看看