我有一个小问题。我正在尝试执行一个简单的操作,但我不断遇到相同的错误,我的想法用光了,我在互联网上找不到任何东西...
导致错误的代码部分如下:
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/