2017-02-21 9 views
1

У меня есть небольшая проблема. Я пытаюсь выполнить простую операцию, но я продолжаю получать ту же ошибку, у меня заканчиваются идеи, и я не нашел ничего в Интернете ...Ошибка подключения к 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) 
    } 
    })}; 

Я знаю, что код не является большим, но все же ... сообщение «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 

Если кто-то может сказать мне, что я делаю неправильно, было бы здорово!

Спасибо!

ответ

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, потому что результат, сгенерированный обратным вызовом, не успел выполнить.

+0

Я внесла свои исправления, и он работает! Большое спасибо ! Однако у меня сейчас другая проблема, выполнение возвращается: 'test42 test43 Мы связаны test44 /home/ubuntu/workspace/UShort/node_modules/mongodb/lib/utils.js:98 process.nextTick (функция () {throw err;}); ^ TypeError: Не удается прочитать свойство «оригинал» неопределенной ' Я предполагаю, что это не было времени для извлечения данных из базы данных и возвращается неопределенными ... Есть ли у вас какое-либо решение для этого? Еще раз спасибо – Barnabe

+0

Возможно, вы захотите добавить свой исходный пост, но я бы настоятельно рекомендовал вам опубликовать новую проблему как новый вопрос, так как он будет иметь наибольшую вероятность привлечения хорошего ответа. –

+0

Да, но я предполагаю, что это было бы лучше избегать спама, так как это не очень важно ... – Barnabe

 Смежные вопросы

  • Нет связанных вопросов^_^