2016-11-02 19 views
1

私はNode.jsとMySQLを使用してデータベースからデータを取得しようとしています。なぜこのコードはjsonデータを返しませんか?

var app=require('express')(); 
var bodyParser=require("body-parser"); 
var mysql=require('mysql'); 
var http=require('http'); 
http.createServer(function (request, response) { 
    response.writeHead(200, {'Content-Type': 'text/plain'}); 
    response.end(); 
}).listen(8081); 
console.log('Server running at http://127.0.0.1:8081/'); 
var connection=mysql.createConnection({ 
    host: 'localhost', 
    user: 'root', 
    password: "", 
    database: 'books' 
}); 
connection.connect(function(err) { 
    if (!err) { 
     console.log("Connected to MySQL"); 
    } else if (err) { 
     console.log(err); 
    } 
}); 
app.use(bodyParser.urlencoded({extended: false})); 
app.use(bodyParser.json()); 
app.get('/book', function(req, res){ 
    var data={ 
     'error': 1, 
     'Books': "" 
    }; 
    connection.query("SELECT * FROM book", function(err, rows, fields){ 
     if(rows.length!=0){ 
      data['error']=0; 
      data['Books']=rows; 
      res.json(data); 
     }else{ 
      data['Books']='No books found'; 
      res.json(data); 
     } 
    }); 
}); 

私はnode server.jsを実行すると、それはCMDで次の出力を示しています:MySQLの

しかしに接続http://127.0.0.1:8081/ で実行されている

サーバーをここで

は私がしようとしているものですhttp://127.0.0.1:8081/bookにアクセスしても、出力は表示されません。

注:私のXAMPP ApacheサーバーとMySQLが起動しています。

+0

「app.get( '/ book」、function(req、res)){res.json({書籍:'書籍が見つかりません}})) 'あなたが思うように 'app.get'が動作していることを確認してください。あなたのエラーログをチェックしても、 'book'テーブルがない場合のようにSQLクエリからの例外があった可能性があります。 – Schwern

+0

私はそれを試してみましょう。私はこのJSファイルにサーバーコードを書いているのですが、同時にApacheサーバーがオンになっていますか?次に、私は 'response.end()'の中に何も書きませんでした。それは大丈夫ですか? –

+1

Dunno。変更されたJavascriptファイルをリロードするかどうかによってApacheがどのように設定されるかによって異なります。 Apacheを再起動することはできませんでした。基本的なデバッグアドバイスを提供するだけです。それを取り除き、そこからバックアップを構築してください。 – Schwern

答えて

0

問題は、あなたが2つの異なる冗長Webサーバーを使用していると思います。 1つはhttpで、もう1つはapp(つまりExpress)です。それは今までにない、すべてがtext/plainヘッダを書いて、あなたは関係なく、あなたがアクセスしようとするもののパス空白のページを取得していないだろう終了しているためだけhttpは実際にポート8081

http.createServer(function (request, response) { 
    response.writeHead(200, {'Content-Type': 'text/plain'}); 
    response.end(); 
}).listen(8081); 

に聞いています。

もう1つは、appで、ポートでリッスンしません。だから、すべてのappコードは、アクセスできないサーバーを設定します。

httpのすべてのものを削除する必要はありません。 Expressがこれを処理します。次にapp.listen(8081)に電話してください。

var app  = require('express')(); 
var bodyParser = require("body-parser"); 
var mysql  = require('mysql'); 

var connection=mysql.createConnection({ 
    host: 'localhost', 
    user: 'root', 
    password: "", 
    database: 'books' 
}); 

connection.connect(function(err) { 
    if (!err) { 
     console.log("Connected to MySQL"); 
    } else if (err) { 
     console.log(err); 
    } 
}); 

app.use(bodyParser.urlencoded({extended: false})); 
app.use(bodyParser.json()); 

app.get('/book', function(req, res){ 
    var data={ 
     'error': 1, 
     'Books': "" 
    }; 
    connection.query("SELECT * FROM book", function(err, rows, fields){ 
     if(rows.length!=0){ 
      data['error']=0; 
      data['Books']=rows; 
      res.json(data); 
     }else{ 
      data['Books']='No books found'; 
      res.json(data); 
     } 
    }); 
}); 

app.listen(8081, function() { 
    console.log('Server running on port 8081'); 
}); 
関連する問題