博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
如何在Node.js上的Express.js中获取GET(查询字符串)变量?
阅读量:3576 次
发布时间:2019-05-20

本文共 8476 字,大约阅读时间需要 28 分钟。

是否可以像在PHP的$_GET中那样在的查询字符串中获取变量?

我知道在Node.js中,我们可以在请求中获取URL。 有没有获取查询字符串参数的方法?


#1楼

2014年5月4日更新

此处保留了旧答案: :


1)安装快递: npm install

app.js

var express = require('express');var app = express();app.get('/endpoint', function(request, response) {    var id = request.query.id;    response.end("I have received the ID: " + id);});app.listen(3000);console.log("node express app started at http://localhost:3000");

2)运行应用程序: node app.js

3)在浏览器中访问: http://localhost:3000/endpoint?id=something

我已经收到ID:


(自从我回答以来,很多事情都发生了变化,我相信值得保持最新状态)


#2楼

我从其他答案中学到了知识,并决定在我的整个网站上使用以下代码:

var query = require('url').parse(req.url,true).query;

那你就可以打电话

var id = query.id;var option = query.option;

获取网址应在哪里

/path/filename?id=123&option=456

#3楼

一个小型的Node.js HTTP服务器侦听端口9080,解析GET或POST数据,并将其作为响应的一部分发送回客户端,如下所示:

var sys = require('sys'),url = require('url'),http = require('http'),qs = require('querystring');var server = http.createServer(    function (request, response) {        if (request.method == 'POST') {                var body = '';                request.on('data', function (data) {                    body += data;                });                request.on('end',function() {                    var POST =  qs.parse(body);                    //console.log(POST);                    response.writeHead( 200 );                    response.write( JSON.stringify( POST ) );                    response.end();                });        }        else if(request.method == 'GET') {            var url_parts = url.parse(request.url,true);            //console.log(url_parts.query);            response.writeHead( 200 );            response.write( JSON.stringify( url_parts.query ) );            response.end();        }    });server.listen(9080);

将其另存为parse.js ,然后通过输入“ node parse.js”在控制台上运行。


#4楼

很简单:

范例网址:

http://stackoverflow.com:3000/activate_accountid=3&activatekey=$2a$08$jvGevXUOvYxKsiBt.PpMs.zgzD4C/wwTsvjzfUrqLrgS3zXJVfVRK

您可以使用以下命令打印查询字符串的所有值:

console.log("All query strings: " + JSON.stringify(req.query));

输出量

所有查询字符串:{“ id”:“ 3”,“ activatekey”:“ $ 2a $ 08 $ jvGevXUOvYxKsiBt.PpMs.zgzD4C / wwTsvjz fUrqLrgS3zXJVfVRK”}

具体打印:

console.log("activatekey: " + req.query.activatekey);

输出量

activatekey:$ 2a $ 08 $ jvGevXUOvYxKsiBt.PpMs.zgzD4C / wwTsvjzfUrqLrgS3zXJVfVRK


#5楼

怀特夸克的反应很好。 但是,对于当前版本的Node.js和Express.js,它还需要一行。 确保添加“ require http”(第二行)。 我在这里发布了一个更完整的示例,显示了此调用的工作方式。 运行后,在浏览器中键入http://localhost:8080/?name=abel&fruit=apple ,您将根据代码获得很酷的响应。

var express = require('express');var http = require('http');var app = express();app.configure(function(){    app.set('port', 8080);});app.get('/', function(req, res){  res.writeHead(200, {'content-type': 'text/plain'});  res.write('name: ' + req.query.name + '\n');  res.write('fruit: ' + req.query.fruit + '\n');  res.write('query: ' + req.query + '\n');  queryStuff = JSON.stringify(req.query);  res.end('That\'s all folks'  + '\n' + queryStuff);});http.createServer(app).listen(app.get('port'), function(){    console.log("Express server listening on port " + app.get('port'));})

#6楼

有两种方法可以通过GET方法传递参数

方法1:通过MVC方法传递诸如/ routename /:paramname之类的参数
在这种情况下,您可以使用req.params.paramname来获取参数值。例如,请参考下面的代码,其中我希望将Id作为参数
链接可能像是: :

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作为查询参数
链接可能类似​​于: :

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);

#7楼

//get query&params in express//etc. example.com/user/000000?sex=femaleapp.get('/user/:id', function(req, res) {  const query = req.query;// query = {sex:"female"}  const params = req.params; //params = {id:"000000"}})

#8楼

如果您使用的是ES6Express ,请尝试以下destructuring方法:

const {id, since, fields, anotherField} = request.query;

在上下文中:

const express = require('express');const app = express();app.get('/', function(req, res){   const {id, since, fields, anotherField} = req.query;});app.listen(3000);

您也可以在destructuring使用默认值:

// sample request for testing const req = { query: { id: '123', fields: ['a', 'b', 'c'] } } const { id, since = new Date().toString(), fields = ['x'], anotherField = 'default' } = req.query; console.log(id, since, fields, anotherField)


#9楼

您可以使用

request.query.
;

#10楼

您可以使用express ^ 4.15.4:

var express = require('express'),    router = express.Router();router.get('/', function (req, res, next) {    console.log(req.query);});

希望这可以帮助。


#11楼

您可以使用url模块通过使用url.parse收集参数

var url = require('url');var url_data = url.parse(request.url, true);var query = url_data.query;

在expressjs中,

var id = req.query.id;

例如:

var express = require('express');var app = express();app.get('/login', function (req, res, next) {    console.log(req.query);    console.log(req.query.id); //Give parameter id});

#12楼

我在Express@4.16上使用MEANJS 0.6.0 ,很好

客户:

控制器:

var input = { keyword: vm.keyword };ProductAPi.getOrder(input)

服务:

this.getOrder = function (input) {return $http.get('/api/order', { params: input });};

服务器

路线

app.route('/api/order').get(products.order);

控制者

exports.order = function (req, res) {  var keyword = req.query.keyword  ...

#13楼

app.get('/user/:id', function(req, res) {      res.send('user' + req.params.id);        });

您可以使用此方法,也可以尝试使用body-parser从请求参数中解析特殊元素。


#14楼

express.js您可以轻松实现它,您需要在控制器函数中做的只是:

app.get('/', (req, res, next) => {   const {id} = req.query;   // rest of your code here...})

假设您使用的是es6语法,仅此而已。

PD。 {id}代表Object destructuring ,这是es6的新功能。


#15楼

在Express中,我们可以简单地使用req.query.<name> 。 它与PHP中的$_GET['name']


#16楼

--------访问查询字符串数据-------

假设这是链接

因此,您可以使用快递:

  • req.query.term
  • req.query.page
  • req.query (它将在对象中获取查询)
    //例
    app.get('http://webapplog.com/search?term=node.js&page=1',(req, res)=>{ res.json({term:req.query.term, page:req.query.page}) })

--------访问URL参数-------

假设这是链接
因此,在快递中,您可以使用: app.get('/:term/pages/:page',....)

  • req.params.term
  • req.params.page
    //例子
    app.get('http://webapplog.com/:term/pages/:page',(req, res)=>{ res.json({term:req.params.term, page:req.params.page}) })

#17楼

从我的角度来看,我认为许多人会混淆两个不同的概念。 在REST开发期间,我熟悉通过两种方式在URL中传递信息:“路径变量”和“请求参数”(查询参数)。 RFC像这样描述URI的各个部分: 所以我了解作者很想知道如何传递请求参数。 我只想使该主题更容易理解,但是这里多次提到了该解决方案。

您可以使用request.query.<name of the parameter>从URI获取查询参数,提到的第二个解决方案是request.params.<name of the parameter> ,并由此获得路径变量。


#18楼

实际上很简单:

const express= require('express');const app = express();app.get('/post', (req, res, next) => {  res.send('ID:' + req.query.id + ' Edit:'+ req.query.edit);});app.listen(1000);// localhost:1000/post?id=123&edit=true// output: ID: 123 Edit: true

#19楼

为什么不与服务器代码混合

例如。 的PHP


#20楼

因此,可以通过两种方式接收此“ id”:1)使用params:代码params看起来类似于:假设我们有一个数组,

const courses = [{    id: 1,    name: 'Mathematics'},{    id: 2,    name: 'History'}];

然后对于参数,我们可以做类似的事情:

app.get('/api/posts/:id',(req,res)=>{    const course = courses.find(o=>o.id == (req.params.id))    res.send(course);});

2)另一种方法是使用查询参数。 因此该网址看起来像“ ..... \\ 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);});

#21楼

var express = require('express');var app = express();app.get('/', function(req, res){  res.send('id: ' + req.query.id);});app.listen(3000);

#22楼

在Express中,它已经为您完成,您只需使用即可:

var id = req.query.id; // $_GET["id"]

否则,在 ,您可以访问和内置的url模块到[url.parse]( ):

var url = require('url');var url_parts = url.parse(request.url, true);var query = url_parts.query;

#23楼

您应该能够执行以下操作:

var http = require('http');var url  = require('url');http.createServer(function(req,res){    var url_parts = url.parse(req.url, true);    var query = url_parts.query;    console.log(query); //{Object}    res.end("End")})

#24楼

既然您在标记中提到了Express.js,那么这是Express特有的答案: 。 例如

var express = require('express');var app = express();app.get('/', function(req, res){  res.send('id: ' + req.query.id);});app.listen(3000);

#25楼

对于Express.js,您需要执行req.params

app.get('/user/:id', function(req, res) {  res.send('user' + req.params.id);    });

#26楼

在Express中,使用req.query

req.params仅获取路由参数,而不获取查询字符串参数。 请参阅或文件:

(req.params)检查路由参数,例如:/ user /:id

(req.query)检查查询字符串参数,例如:?id = 12检查urlencoded主体参数

(req.body),例如:id = 12要使用经过urlencoded的请求正文,req.body应该是一个对象。 这可以通过使用_express.bodyParser中间件来完成。

就是说,在大多数情况下,无论参数的来源如何,您都希望获得其值。 在这种情况下,请使用req.param('foo')

无论变量是在路由参数,查询字符串还是编码的请求正文中,都将返回参数的值。

旁注-如果您打算获取所有三种类型的请求参数的交集(类似于PHP的$_REQUEST ),则只需将参数合并在一起-这就是我 。 请记住,路径/路线参数对象( req.params )具有数组属性,因此顺序很重要(尽管 )

转载地址:http://heogj.baihongyu.com/

你可能感兴趣的文章
HTTP协议
查看>>
Python小程序——冒泡排序
查看>>
cmd中输入net start mysql 提示:服务名无效或者MySQL正在启动 MySQL无法启动
查看>>
LeetCode 206反转链表 [javsScript]
查看>>
[LeetCode javaScript] 3. 无重复字符的最长子串
查看>>
[LeetCode javaScript] 6. Z字形变换
查看>>
[LeetCode javaScript]455. 分发饼干
查看>>
[LeetCode javaScript] 735. 行星碰撞
查看>>
[LeetCode javaScript] 125. 验证回文串
查看>>
[LeetCode javaScript] 226. 翻转二叉树
查看>>
[LeetCode javaScript] 520. 检测大写字母
查看>>
[LeetCode javaScript] 53.最大子序和
查看>>
[LeetCode javaScript] 101. 对称二叉树
查看>>
[LeetCode javaScript] 860. 柠檬水找零
查看>>
[LeetCode javaScript] 118. 杨辉三角
查看>>
[LeetCode javaScript] 905. 按奇偶校验排序数组
查看>>
[LeetCode javaScript] 617. 合并二叉树
查看>>
[LeetCode javaScript] 292. Nim游戏
查看>>
[LeetCode javaScript] 896. 单调数列
查看>>
[LeetCode javaScript] 804. 唯一摩尔斯密码词
查看>>