我们可以在Node.js中获取查询字符串中的变量吗,就像在PHP中获取$_get中的变量一样?
我知道在Node.js中,我们可以获取请求中的URL。是否有获取查询字符串参数的方法?
我们可以在Node.js中获取查询字符串中的变量吗,就像在PHP中获取$_get中的变量一样?
我知道在Node.js中,我们可以获取请求中的URL。是否有获取查询字符串参数的方法?
当前回答
在Express中,这已经为您完成了,您可以简单地使用req.query:
var id = req.query.id; // $_GET["id"]
否则,在NodeJS中,您可以访问req.url和内置的url模块来url.parse它:
var url = require('url');
var url_parts = url.parse(request.url, true);
var query = url_parts.query;
其他回答
在Express中,使用req.query。
req.params只获取路由参数,而不获取查询字符串参数。参见快车或帆船文档:
(req.params)检查路由参数,例如:/user/:id(req.query)检查查询字符串参数,例如:?id=12检查URL编码的主体参数(req.body),ex:id=12要使用url编码的请求体,req.body应该是一个对象。这可以通过使用_express.bodyParser中间件来完成。
也就是说,大多数时候,无论参数的来源如何,您都希望获得参数的值。在这种情况下,请使用req.param('fo')。注意,从Express 4开始,这已经被弃用:http://expressjs.com/en/4x/api.html#req.param
无论变量是在路由参数、查询字符串还是编码的请求体中,都将返回该参数的值。
附带说明-如果您的目标是获得所有三种类型的请求参数的交集(类似于PHP的$_request),您只需要将这些参数合并在一起——下面是我在Sails中如何设置的。请记住,path/route-parameters对象(req.params)具有数组财产,因此顺序很重要(尽管在Express4中可能会更改)
//get query¶ms in express
//etc. example.com/user/000000?sex=female
app.get('/user/:id', function(req, res) {
const query = req.query;// query = {sex:"female"}
const params = req.params; //params = {id:"000000"}
})
因此,有两种方式可以接收此“id”:1) 使用params:代码params看起来像:假设我们有一个阵列,
const courses = [{
id: 1,
name: 'Mathematics'
},
{
id: 2,
name: 'History'
}
];
然后,对于params,我们可以执行以下操作:
app.get('/api/posts/:id',(req,res)=>{
const course = courses.find(o=>o.id == (req.params.id))
res.send(course);
});
2) 另一种方法是使用查询参数。因此url看起来像“…..\api\xyz?id=1”,其中“?id=1“是查询部分。在这种情况下,我们可以执行以下操作:
app.get('/api/posts',(req,res)=>{
const course = courses.find(o=>o.id == (req.query.id))
res.send(course);
});
如果您需要向IP和域发送GET请求(其他答案没有提到您可以指定端口变量),您可以使用此函数:
function getCode(host, port, path, queryString) {
console.log("(" + host + ":" + port + path + ")" + "Running httpHelper.getCode()")
// Construct url and query string
const requestUrl = url.parse(url.format({
protocol: 'http',
hostname: host,
pathname: path,
port: port,
query: queryString
}));
console.log("(" + host + path + ")" + "Sending GET request")
// Send request
console.log(url.format(requestUrl))
http.get(url.format(requestUrl), (resp) => {
let data = '';
// A chunk of data has been received.
resp.on('data', (chunk) => {
console.log("GET chunk: " + chunk);
data += chunk;
});
// The whole response has been received. Print out the result.
resp.on('end', () => {
console.log("GET end of response: " + data);
});
}).on("error", (err) => {
console.log("GET Error: " + err);
});
}
不要错过文件顶部的所需模块:
http = require("http");
url = require('url')
还要记住,您可以使用https模块通过安全域和ssl进行通信。因此这两条线将改变:
https = require("https");
...
https.get(url.format(requestUrl), (resp) => { ......
通过GET方法传递参数有两种方法方法1:MVC方法,其中传递参数,如/routename/:paramname在这种情况下,您可以使用req.params.paramname获取参数值。例如,请参阅下面的代码,其中我希望Id作为参数链接可以是:http://myhost.com/items/23
var express = require('express');
var app = express();
app.get("items/:id", function(req, res) {
var id = req.params.id;
//further operations to perform
});
app.listen(3000);
方法2:常规方法:使用“?”将变量作为查询字符串传递操作人员例如,请参阅下面的代码,其中我希望Id作为查询参数链接可以是:http://myhost.com/items?id=23
var express = require('express');
var app = express();
app.get("/items", function(req, res) {
var id = req.query.id;
//further operations to perform
});
app.listen(3000);