2017-04-05 2 views
0

에도 불구하고 DB가 선택되지 않았습니다. 따라서 node.js 코드에 "No database selected"오류가 표시됩니다. 그러나 선택되어 있으며 연결 문은 처음 시작할 때 성공적인 메시지를 반환합니다. 내 튜토리얼 (https://www.sitepoint.com/using-node-mysql-javascript-client/)Node.JS

또한 npm을 사용하는 노드 용 MySQL 모듈을 설치했는데 모듈 아래에 있다고해도 데이터베이스를 넣어도 여전히 제대로 작동하지 않습니다. 존재하지 않는 무언가가 있으면 그것은 여전히 ​​성공적인 연결이라고 말할 것입니다. 그래서 나는 두 부분의 질문 : 어떻게 실제로 MySQL 구성 요소를 제대로 다운로드했는지 확인하고 내 봇에서 실수를 저지르고 있는지 확인하는 것입니다. 아래 코드.

// Dependencies ========================= 
var 
    twit = require('twit'), 
    config = require('./config'); 

var mysql = require("mysql"); 

var con = mysql.createConnection(
{  
    host: "localhost", 
    user: "root", 
    password: "Jaljap2732!", 
    dateStrings: true, 
    datebase: "rawdata" 
}); 



var Twitter = new twit(config); 

con.connect(function(err) { 
    if(err) { 
     console.log("Sorry Fam, error connecting"); 
    } else { 
     console.log("Connection Successful") 
    } 
}); 



var searchTweets = function(){ 
    var params = { 
     q: 'since:2017-04-01', // REQUIRED 
     result_type: 'recent', 
     count:'10', 
     lang: 'en' 
    } 
    // find the tweet 
    Twitter.get('search/tweets', params, function(err,data){ 

    // find tweets 
    var tweet = data.statuses; 

     //console.log(tweet); 
    for(var result in tweet) { 
     console.log("text: " + tweet[result].text); 
     var created_at = tweet[result].created_at; 
     var date = created_at.split(" "); 
     var month = date[1]; 

     var sqlDate = date[5] + "-" + monthToInt(month) + "-" + date[2]; 


     var data = { 
     tweet: tweet[result].text, 
     posted: sqlDate, 
     User_idUser: tweet[result].user.screen_name 
     }; 

     con.query('INSERT INTO tweet SET ?', data, function(err, rows) { 
      if(err) throw err; 
      else { 
       console.log("Data from DB"); 
       console.log(rows); 
      } 
     }); 

     console.log("Posted at: " + date[1] + " " + date[2] + " " + date[5]); 
     console.log("Converted Date: " + monthToInt(month)); 
     console.log("User: " + tweet[result].user.screen_name); 
    } 

    }); 
} 
// grab & 'favorite' as soon as program is running... 
searchTweets(); 
// 'favorite' a tweet in every 15 minutes 
setInterval(searchTweets, 900000); 


function monthToInt(month) { 

    //We will return a string representation of the month 
    //using numbers in order to insert it into our SQL table. 


    var result = ""; 

    switch(month) { 
     case "Jan": 
      console.log("Janaury: 01"); 
      result = "01"; 
      break; 
     case "Feb": 
      console.log("February: 02"); 
      result = "02"; 
      break; 
     case "Mar": 
      console.log("March: 03"); 
      result = "03"; 
      break; 
     case "Apr": 
      console.log("April: 04"); 
      result = "04"; 
      break; 
     case "May": 
      console.log("May: 05"); 
      result = "05"; 
      break; 
     case "Jun": 
      console.log("Jun: 06"); 
      result = "06"; 
      break; 
     case "Jul": 
      console.log("Jul: 07"); 
      result = "07"; 
      break; 
     case "Aug": 
      console.log("August: 08"); 
      result = "08"; 
      break; 
     case "Sept": 
      console.log("September: 09"); 
      result = "09"; 
      break; 
     case "Sep": 
      console.log("September: 09"); 
      result = "09"; 
      break; 
     case "Oct": 
      console.log("October: 10"); 
      result = "10"; 
      break; 
     case "Nov": 
      console.log("November: 11"); 
      result = "11"; 
      break; 
     case "Dec": 
      console.log("December: 12"); 
      result = "12"; 
      break; 
    } 

    return result; 
} 
+0

db 연결 콜백 내에서 모든 tweeting을 수행해야합니까? –

+0

어쩌면? 나는 정직하기 위해 node.js에 상당히 익숙하지 않다. 그리고 나는 여전히 전화를 끊는다. – SomeStudent

+0

올바르게 다운로드했는지 확인하려면'node_modules' 폴더에있는'mysql' 폴더를 지우고'npm install mysql '을 실행하면 패키지가 다시 설치됩니다. –

답변

0

수정의 해킹이지만 다른 쿼리를 사용하여 문제의 데이터베이스를 사용하도록했습니다. 나는 코드가 순차적으로 실행되는 것을 보는 방식으로 경쟁 조건을 설명하는 막연한 대답이 아니라 견고한 대답을 진지하게 고맙게 생각합니다. searchCode의 안쪽 부분은 다른 것보다 먼저 실행되어야합니다.