我有一个小问题。我正在尝试执行一个简单的操作,但我继续犯同样的错误,我的想法已经用完了,我无法在互联网上找到任何东西......
导致错误的代码部分如下:
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
如果有人能告诉我我做错了什么就会很棒!
谢谢!
答案 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
,因为回调生成的输出将没有时间执行。