2015-11-03 147 views
0

我在Express中獲取URL參數時遇到問題。 在客戶端(角),我定義狀態(ui.router),並用新的狀態發送URL(ID):如何在Express中獲取URL參數?

.state('home.detail', { 
    url: '/:id', 
    templateUrl: 'views/detail.html', 
    controller: 'DetailController' 
}); 

在後端,我試圖讓這個URL(ID)

app.get('/api/:id', function(req,res){ 
    var id = req.query.id; 
    console.log(id); 

    var queryString = "SELECT * FROM `table` WHERE table.ID=id"; 
    //add to a callback 
    connection.query(queryString, function (error, results) { 
     if(error) { 
      throw error; 
     } 
     else { 
      // send JSON object to the client 
      res.end(JSON.stringify(results)); 
      //console.log(res); 
     } 
    }); 
}); 

但我得到了undefined id(console.log(id))的值。 我做錯了什麼?

+0

請讓我知道,如果我的回答你解決問題了:) – IggY

回答

2

你應該使用這樣的:

var id = req.params.id; 
  • req.params包含路由參數(在 URL的路徑部分)
  • req.query包含URL查詢參數(後在 的網址是什麼? )。
1

:id被放入請求中的params對象。所以,你必須做的就是它是做:

var id = req.params.id; 

此外,當你建立你的queryString你需要傳遞id的值,而不是所謂的「ID」的字符串。你將不得不做這樣的事情:

var queryString = "SELECT * FROM `table` WHERE table.ID=" + id; 
+0

我'req.params.id'試過,我改變了查詢到'VAR的queryString =「 SELECT * FROM table WHERE table.ID =「+ id;'我得到錯誤:ER_PARSE_ERROR:你的SQL語法有錯誤;請檢查與您的MySQL服務器版本相對應的手冊,以便在第1行的':id'附近使用正確的語法。我是否需要使用某個URL分析器?謝謝 – corry

+1

如果這是一個MySQL錯誤,而您只需要重新格式化您的查詢字符串,但是MySQL的版本需要它。 expressJS上下文中的查詢解析器用於解析url中的查詢參數。所以,如果用戶打電話給'example.com?id=5&name=hello',查詢解析器會在req.query對象中爲你解析'id'和'name'(僅舉一個例子)。 –

+0

我已經安裝了[node-mysql](http:// https://github.com/felixge/node-mysql/#escaping-query-values),新的格式是:'connection.query('SELECT * FROM表WHERE ID =「,[ID],功能(錯誤,結果){\t \t \t 如果\t(誤差){ \t \t \t擲誤差; \t \t} \t \t否則{ \t \t \t //發送JSON對象給客戶端 \t \t res.end(JSON.stringify(results)); \t \t //console.log(res); \t \t} \t});'錯誤消失了,但不是值(1),我在運行應用程序時在console.log(:id)中得到了一個名字。當我嘗試手動訪問API(http:// localhost/api /:1)時,我很感興趣,我獲取數據並在日誌中輸入了id(1)。 – corry