我有一个小问题。我正在尝试执行一个简单的操作,但我不断遇到相同的错误,我的想法用光了,我在互联网上找不到任何东西...

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

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)
  }
  } )};


我知道代码不是很好,但是仍然...
控制台中显示消息“ test43”,此后,我不断得到:

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

TypeError: first argument must be a string or Buffer


如果有人能告诉我我做错了那太好了!

谢谢 !

最佳答案

错误告诉您response.write()需要一个string(或Buffer),但是您的函数readDB不返回任何内容,该函数内部有一个回调函数,该回调函数返回某些内容,但是该调用被异步调用,因此您的错误行被读取为response.write(undefined)。也许考虑通过将response函数更改为以下形式,将readDB对象作为参数传递:

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


然后这样称呼它:

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


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

关于javascript - 连接到MongoDB时出错,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42379440/

10-13 07:02