连接到MongoDB时出错

时间:2017-02-21 22:45:39

标签: javascript node.js mongodb

我有一个小问题。我正在尝试执行一个简单的操作,但我继续犯同样的错误,我的想法已经用完了,我无法在互联网上找到任何东西......

导致错误的代码部分如下:

response.write(readDB(no));   // <= this line
response.end();

readDB函数在这里:

function readDB(gene){
    console.log("test43");
    MongoClient.connect(url, function(err, db) {
  if(!err) {
    console.log("We are connected");
    console.log("test44");
    var collection = db.collection('links');
    var ans=  collection.find( { generated: gene}, {original:1, _id:0}, function(err, gg){
    console.log("test dat result:"+ans.original);
        console.log("acces to:"+ans.original);
        var rep
        rep.writeHead(200, {"Content-Type": "text/html"});
        rep.write("<html>");
        rep.write("<head>");
        rep.write("<title>Redirection</title>");
        rep.write("<meta http-equiv=\"refresh\" content=\"5\"; URL=\""+ans.original+"\">");
        rep.write("<script type=\"text/javascript\">window.location.href = \""+ans.original+"\"</script>");
        rep.write("</head>");
        rep.write("<body>Redirection...");
        rep.write("</body>");
        rep.write("</html>");
        return rep;
  })
  }
  if(err){
    //console.log(err)
  }
  } )};

我知道代码不是很好,但仍然...... 消息&#34; test43&#34;在我的控制台中显示,然后我继续得到:

_http_outgoing.js:436
    throw new TypeError('first argument must be a string or Buffer');
    ^

TypeError: first argument must be a string or Buffer

如果有人能告诉我我做错了什么就会很棒!

谢谢!

1 个答案:

答案 0 :(得分:1)

错误告诉您response.write()期待string(或Buffer),但您的函数readDB不会返回任何内容中有回调的内容函数返回一些东西,但这是异步调用的,所以你的错误行被读作response.write(undefined)。也许可以考虑通过将response函数更改为这样来将readDB对象作为参数传递:

function readDB(gene, rep){
...
}

然后这样称呼:

readDB(no, response);   // <= this line

你还需要删除函数内部的var rep,因为它会覆盖传入的响应参数(也没有必要返回它虽然没有副作用,我可以通过不必要地返回它来考虑)。最后,您将不希望在调用更新的response.end()函数后立即调用readDB,因为回调生成的输出将没有时间执行。