使用 Mongodb 和 Node.js 无法加载 c++ bson 扩展错误

Posted

技术标签:

【中文标题】使用 Mongodb 和 Node.js 无法加载 c++ bson 扩展错误【英文标题】:Getting failed to load c++ bson extension error using Mongodb and Node.js 【发布时间】:2015-08-30 12:37:59 【问题描述】:

我在尝试使用 Node.ja 和 Mongodb 运行服务器时遇到以下错误。

错误:

 [Error: Cannot find module '../build/Release/bson'] code: 'MODULE_NOT_FOUND' 

js-bson: Failed to load c++ bson extension, using pure JS version
 [Error: Cannot find module '../build/Release/bson'] code: 'MODULE_NOT_FOUND' 

js-bson: Failed to load c++ bson extension, using pure JS version
 [Error: Cannot find module '../build/Release/bson'] code: 'MODULE_NOT_FOUND' 

js-bson: Failed to load c++ bson extension, using pure JS version
 [Error: Cannot find module '../build/Release/bson'] code: 'MODULE_NOT_FOUND' 

js-bson: Failed to load c++ bson extension, using pure JS version

C:\xampp\htdocs\odiya_chat\server.js:15
db = mongo.connect("127.0.0.1:27017/"+db, collections);
           ^
TypeError: Object function (connString, cols) 
  var dbname = getDbName(connString);
  var onserver = thunky(function(cb) 
    getTopology(connString, function(err, topology) 
      if (err) return cb(err);
      cb(null, topology);
    );
  );

  if (!dbname) 
    dbname = connString._dbname;
    onserver = thunky(function(cb) 
      toMongodbCore(connString, function(err, server) 
        if (err) cb(new Error('You must pass a connection string or a mongojs in
stance.'));
        cb(null, server);
      );
    );
  

  var that = new Database(name: dbname, cols: cols, onserver);
  if (typeof Proxy !== 'undefined') 
    var p = Proxy.create(
      get: function(obj, prop) 
        if (that[prop]) return that[prop];
        that[prop] = that.collection(prop);
        return that[prop];
      
    );

    return p;
  ;
  return that;
 has no method 'connect'
    at Object.<anonymous> (C:\xampp\htdocs\odiya_chat\server.js:15:12)
    at Module._compile (module.js:456:26)
    at Object.Module._extensions..js (module.js:474:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Function.Module.runMain (module.js:497:10)
    at startup (node.js:119:16)
    at node.js:929:3

错误 2

 [Error: Cannot find module '../build/Release/bson'] code: 'MODULE_NOT_FOUND' 

js-bson: Failed to load c++ bson extension, using pure JS version
 [Error: Cannot find module '../build/Release/bson'] code: 'MODULE_NOT_FOUND' 

js-bson: Failed to load c++ bson extension, using pure JS version
 [Error: Cannot find module '../build/Release/bson'] code: 'MODULE_NOT_FOUND' 

js-bson: Failed to load c++ bson extension, using pure JS version
 [Error: Cannot find module '../build/Release/bson'] code: 'MODULE_NOT_FOUND' 

js-bson: Failed to load c++ bson extension, using pure JS version

我的服务器端代码如下。

服务器.js

var port=8888;
var express=require('express');
var http=require('http');
var morgan         = require('morgan');
var bodyParser     = require('body-parser');
var methodOverride = require('method-override');
var cookieParser     = require('cookie-parser');
var session = require('express-session');
var MongoDBStore = require('connect-mongodb-session')(session);
var mongo = require('mongojs');
var app=express();
var server=http.createServer(app);
db = 'doctor',
collections = ['oditek'],
db = mongo.connect("127.0.0.1:27017/"+db, collections);
app.use(express.static(__dirname + '/public'));     // set the static files location /public/img will be /img for users
app.use(morgan('dev'));                     // log every request to the console
app.use(bodyParser.urlencoded( extended: false ))    // parse application/x-www-form-urlencoded
app.use(bodyParser.json())    // parse application/json
app.use(methodOverride());
app.use(cookieParser());
//app.use(expressSession(secret:'somesecrettokenhere'));                  // simulate DELETE and PUT
app.get('/',function(req,res)
    res.sendfile('view/index.html');
)
app.get('/login',function(req,res)
    res.sendfile('view/login.html');
);
app.get('/chatroom',function(req,res)
    if(req.session)
        res.sendfile('view/chatroom.html');
    
);
server.listen(port);
console.log('server is running on the port'+port);

我的要求是,如果用户已经登录客户端,他将获得 chatroom.html 页面,如果不在客户端,它将要求您登录。我在这里实现 connect-mongodb-session 以存储会话。我有阅读有关此的一些帖子并尝试了答案,但仍然存在错误。请帮助我解决此错误。

【问题讨论】:

【参考方案1】:

由于您使用的是mongojs 模块,因此您必须使用以下方法连接到数据库

db = mongo("127.0.0.1:27017/"+db, collections);

【讨论】:

@Bidhan:感谢它现在开始工作,但仍然存在一些错误,我已在我的问题中将这些错误发布为 Error-2。 那些不是错误。只有警告。这意味着您使用的是速度较慢的 JS 版本,而不是使用速度快的 bson 版本。发生这种情况是由于您的模块的不同版本存在问题。不过,您的应用程序应该仍然可以正常运行。你的应用在运行吗? 是的,Bidhan 它运行良好,但那些消息在那里,这就是我问的原因..有什么解决方案可以删除这些..? 在 Stack Overflow 上已经有很多关于这些警告信息的讨论。例如:***.com/questions/28651028/…。有的人能解决,有的人不行。它通常是由于您使用的不同版本的库之间的不匹配而发生的。也许切换到旧版本的 mongojs 可能会有所帮助,但我不是 100% 确定。

以上是关于使用 Mongodb 和 Node.js 无法加载 c++ bson 扩展错误的主要内容,如果未能解决你的问题,请参考以下文章

使用 node.js 从 Mongodb 获取数据时,浏览器会一直加载

使用 Mongoose 的 Node.js 和 MongoDB。无法使用 findByIdAndUpdate 增加文档版本

使用 Mongoose 的 Node.js 和 MongoDB。无法使用 findByIdAndUpdate 增加文档版本

无法使用 Node.js Express MongoDB Mongoose CoffeeScript 发布

使用 Node.js 的 MongoDB 引用我无法填充

无法即时更新 mongodb 文档