2015-10-12 76 views
0

我有以下腳本將URL作爲參數,並從MariaDB中檢索數據並顯示它。直到瀏覽器刷新兩次後,NodeJS腳本纔會響應

var express = require('express'); 
var app = express(); 
var Client = require('mariasql'); 
var http = require("http"); 
var url = require("url"); 
var output; 

var c = new Client({ 
    host: '127.0.0.1', 
    user: 'root', 
    db: 'MyDB' 
}); 

http.createServer(function(request, response) 
{ 
    var parsed = url.parse(request.url); 
    response.writeHead(200, {'Content-Type': 'text/plain'}); 
    if(String(parsed.href) == "/") 
    { 
     c.query('SELECT * FROM table', 
       null, 
       //{ useArray: true }, 
       function(err, rows) 
       { 
        if(err) 
        { 
         output = "Incorrect Argument"; 
        } 
        else 
        { 
         output = rows; 
        } 
       } 
     ); 
     c.end(); 
    } 
    response.end(output);     
}).listen(3000); 

現在,當我運行該腳本在瀏覽器上顯示的輸出是正確的,但它只有當我刷新瀏覽器中出現兩次。 我對NodeJS真的很新,我不知道問題是什麼,以及我究竟在哪裏出錯。

+0

你不覺得前面提到的錯誤信息會幫助我們嗎? ;) –

+0

好吧,我想出了CURL的一部分,它不在URL中使用「&」。 我還沒有弄清楚瀏覽器刷新的部分。 – Priyanka

回答

1

在Node/javascript回調函數可能會在不同的時間調用。例如,在你的代碼返回的查詢回調你最終響應後 - 你應該結束回調塊的響應,如下:

var express = require('express'); 
var app = express(); 
var Client = require('mariasql'); 
var http = require("http"); 
var url = require("url"); 
var output; 

var c = new Client({ 
    host: '127.0.0.1', 
    user: 'root', 
    db: 'MyDB' 
}); 

http.createServer(function(request, response) { 

    var parsed = url.parse(request.url); 
    response.writeHead(200, {'Content-Type': 'text/plain'}); 
    if(parsed.href == "/") { 
     c.query('SELECT * FROM table', 
     null, 
     //{ useArray: true }, 
     function(err, rows) 
     { 
      if(err) 
      { 
       response.statusCode = 404; 
       response.end(); 
      } 
      else 
      { 
       output = rows; 
       response.end(output); 
      } 

     }); 
}}).listen(3000); 
1

c.query是一個異步函數,所以就把輸出回調:

http.createServer(function(request, response) { 
var parsed = url.parse(request.url); 
response.writeHead(200, {'Content-Type': 'text/plain'}); 
if(String(parsed.href) == "/") { 
    c.query('SELECT * FROM table', null, function(err, rows){ 
     if (err) { 
      output = "Incorrect Argument"; 
     } else { 
      output = rows; 
     } 
     response.end(output); 
    }); 
    c.end(); 
}  
}).listen(3000); 

此外,你需要將行轉換成有效的輸出格式。你真的想把它們發送成text/plain嗎?

+0

工作很好!謝謝 :) – Priyanka

相關問題