2015-11-03 204 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