2016-11-02 84 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下面的輸出:

服務器運行在http://127.0.0.1:8081/ 連接到MySQL

但是,當我訪問http://127.0.0.1:8081/book,它不顯示任何輸出。

注意:我的XAMPP Apache服務器和MySQL已啓動。

+0

嘗試將它簡化爲'app.get('/ book',function(req,res){res.json({Books:'No books found'})})'看看是否可行確保'app.get'正如你認爲的那樣工作。同時檢查你的錯誤日誌,可能是SQL查詢中有一個例外,就像沒有'book'表一樣。 – Schwern

+0

好的,我會嘗試。是否可以在此JS文件中編寫服務器代碼,並且同時Apache服務器已啓動?其次,我沒有在'response.end()'裏面寫下任何內容。 –

+1

鄧諾。取決於Apache是​​如何配置它是否會重新加載更改的Javascript文件。不能傷害重新啓動Apache。只需提供基本的調試建議:將其剝離並從此建立備份。 – Schwern

回答

0

問題是,我相信你正在使用兩個不同的冗餘Web服務器。一個是http,另一個是app(即Express)。只有http實際上正在偵聽端口8081

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

因爲它曾經做了所有的是寫一個text/plain頭和退出你會得到一個空白頁,不管你訪問哪些路徑。

另一個,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'); 
});