1

我是新来的,也是 mongo 等的新手,我遇到了一个奇怪的问题,需要帮助。

我创建了一个 app.js 文件,我正在使用 node 运行它。它监听网络请求并调用函数使用 mongoskin 驱动程序将记录写入 mongodb。它有点工作,但由于某种原因,它将两条记录插入到 mongodb 中,而不是一条。

我意识到代码不是一个好的设计,目前它是硬编码的,因为我只是想了解它在这个阶段是如何结合和协同工作的。无论如何,这是我的 app.js 中的代码:

var http = require('http');
http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end( hello() );
}).listen(3000, '127.0.0.1');
console.log('Server running at http://127.0.0.1:3000/');

function hello()
{
    // test mongodb and mongoskin driver
    var msg = "";
    var db = require('mongoskin').db('localhost:27017/mydb'); 

    db.collection('users').insert({site: "test.com", email: "fredbloggs@gmail.com", firstname: "Fred", lastname: "Bloggs", password: "hello"}, 
        function(err, result) {
            if (err) msg = "fail";
            if (result) msg="success";
        });

    return msg; 
}

我的原始安装遇到了一些问题,想知道我是否可能安装了两次 mongo 或类似的东西?是否有可能两个 mongo 实例正在接收我的请求并指向同一个数据库?可能有点脆弱,但任何帮助将不胜感激。

非常感谢凯利。

4

2 回答 2

0

嗨这是一个简单的驱动程序与您的示例一起使用。请注意,我们使用 MongoClient 连接到数据库一次,对 Web 服务器的每个请求现在都将重用连接池。

var   http = require('http');
    , MongoClient = require('mongodb').MongoClient;

MongoClient.connect("mongodb://localhost:27017/mydb", function(err, db) {

  http.createServer(function (req, res) {
    res.writeHead(200, {'Content-Type': 'text/plain'});
    hello(res);
  }).listen(3000, '127.0.0.1');

  console.log('Server running at http://127.0.0.1:3000/');

  function hello(res) {
    // test mongodb and mongoskin driver
    db.collection('users').insert({
        site: "test.com"
      , email: "fredbloggs@gmail.com"
      , firstname: "Fred"
      , lastname: "Bloggs"
      , password: "hello" }, function(err, result) {
        var msg;

        if(err) msg = "fail";
        if(result) msg="success";

        res.end(msg);
      });
  }
})
于 2013-01-15T22:35:59.707 回答
0

由于您刚刚开始,您可能希望使用本机驱动程序,而不是 mongoskin。或者至少用它测试你的配置。Mongoskin 建立在本机驱动程序之上,并且两者都在积极开发中,因此很容易成为版本偏差问题的牺牲品。一旦您对本机驱动程序感到满意,并且需要未来模式的便利性,那么您应该能够轻松切换到 mongoskin。

于 2013-01-04T17:48:01.423 回答