如何在"?"之后访问GET参数 在快递?

Han*_*Sun 486 node.js query-string express

我知道如何获得这样的查询的参数:

app.get('/sample/:id', routes.sample);
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我可以req.params.id用来获取参数(例如2in /sample/2).

但是,对于url来说/sample/2?color=red,如何访问变量color?

我试过req.params.color但它没用.

Han*_*Sun 701

因此,在查看快速参考后,我发现req.query.color会返回我正在寻找的值.

req.params是指URL中带有':'的项目,req.query是指与'?'相关联的项目

例:

GET /something?color1=red&color2=blue
Run Code Online (Sandbox Code Playgroud)

然后在express中,处理程序:

app.get('/something', (req, res) => {
    req.query.color1 === 'red'  // true
    req.query.color2 === 'blue' // true
})
Run Code Online (Sandbox Code Playgroud)

  • 在最新版本中使用`req.params.whatever`. (4认同)
  • 注意`req.params` 和`req.query` 不同!http://expressjs.com/en/api.html#req.params http://expressjs.com/en/api.html#req.query @adelriosantiago (3认同)

sat*_*mar 80

使用req.query,获取路由中查询字符串参数的值.请参阅req.query.假如在路由中,http:// localhost:3000 /?name = satyam你想获取name参数的值,那么你的'Get'路由处理程序将如下所示: -

app.get('/', function(req, res){
    console.log(req.query.name);
    res.send('Response send to client::'+req.query.name);

});
Run Code Online (Sandbox Code Playgroud)


Zug*_*alt 67

更新: req.param()现已弃用,因此请继续使用此答案.


你的答案是首选的方法,但我想我会指出你也可以访问url,post和route参数req.param(parameterName, defaultValue).

在你的情况下:

var color = req.param('color');
Run Code Online (Sandbox Code Playgroud)

从快递指南:

查找按以下顺序执行:

  • req.params
  • req.body
  • req.query

请注意,指南中说明了以下内容:

为了清楚起见,应该直接访问req.body,req.params和req.query - 除非您真正接受来自每个对象的输入.

然而在实践中我实际上已经发现req.param()足够清楚并且使某些类型的重构更容易.

  • 这在最新的Express中已弃用.http://expressjs.com/api.html#req.param (9认同)

And*_*ena 44

@ Zugwait的回答是正确的.req.param()已弃用.你应该使用req.params,req.query或req.body.

但只是为了让它更清晰:

req.params将仅填充路线值.也就是说,如果你有一个路线一样/users/:id,你可以访问id无论是在req.params.id或req.params['id'].

req.query并且req.body将填充所有参数,无论他们是否在路线中.当然,查询字符串中的req.query参数将可用,并且可以使用帖子正文中的参数req.body.

所以,回答你的问题,就像color在路线中一样,你应该能够使用req.query.color或得到它req.query['color'].


Raj*_*lam 43

查询字符串和参数不同.

您需要在单个路由URL中使用它们

请检查以下示例可能对您有用.

app.get('/sample/:id', function(req, res) {

 var id = req.params.id; //or use req.param('id')

  ................

});
Run Code Online (Sandbox Code Playgroud)

获取传递第二段的链接是您的id示例:http:// localhost:port/sample/123

如果您遇到问题,请使用'?'将传递变量用作查询字符串 操作者

  app.get('/sample', function(req, res) {

     var id = req.query.id; 

      ................

    });
Run Code Online (Sandbox Code Playgroud)

获取此示例的链接:http:// localhost:port/sample?id = 123

两者都在一个例子中

app.get('/sample/:id', function(req, res) {

 var id = req.params.id; //or use req.param('id')
 var id2 = req.query.id; 
  ................

});
Run Code Online (Sandbox Code Playgroud)

获取链接示例:http:// localhost:port/sample/123?id = 123

  • 谢谢这个答案非常有帮助! (2认同)

小智 16

快速手册说你应该使用req.query来访问QueryString.

// Requesting /display/post?size=small
app.get('/display/post', function(req, res, next) {

  var isSmall = req.query.size === 'small'; // > true
  // ...

});
Run Code Online (Sandbox Code Playgroud)


sem*_*eme 7

const express = require('express')
const bodyParser = require('body-parser')
const { usersNdJobs, userByJob, addUser , addUserToCompany } = require ('./db/db.js')

const app = express()
app.set('view engine', 'pug')
app.use(express.static('public'))
app.use(bodyParser.urlencoded({ extended: false }))
app.use(bodyParser.json())

app.get('/', (req, res) => {
  usersNdJobs()
    .then((users) => {
      res.render('users', { users })
    })
    .catch(console.error)
})

app.get('/api/company/users', (req, res) => {
  const companyname = req.query.companyName
  console.log(companyname)
  userByJob(companyname)
    .then((users) => {
      res.render('job', { users })
    }).catch(console.error)
})

app.post('/api/users/add', (req, res) => {
  const userName = req.body.userName
  const jobName = req.body.jobName
  console.log("user name = "+userName+", job name : "+jobName)
  addUser(userName, jobName)
    .then((result) => {
      res.status(200).json(result)
    })
    .catch((error) => {
      res.status(404).json({ 'message': error.toString() })
    })
})
app.post('/users/add', (request, response) => {
  const { userName, job } = request.body
  addTeam(userName, job)
  .then((user) => {
    response.status(200).json({
      "userName": user.name,
      "city": user.job
    })
  .catch((err) => {
    request.status(400).json({"message": err})
  })
})

app.post('/api/user/company/add', (req, res) => {
  const userName = req.body.userName
  const companyName = req.body.companyName
  console.log(userName, companyName)
  addUserToCompany(userName, companyName)
  .then((result) => {
    res.json(result)
  })
  .catch(console.error)
})

app.get('/api/company/user', (req, res) => {
 const companyname = req.query.companyName
 console.log(companyname)
 userByJob(companyname)
 .then((users) => {
   res.render('jobs', { users })
 })
})

app.listen(3000, () =>
  console.log('Example app listening on port 3000!')
)
Run Code Online (Sandbox Code Playgroud)

  • 感谢您提供此代码段,该代码段可能会提供一些有限的即时帮助.[正确的解释将极大地改善其长期价值](// meta.stackexchange.com/q/114762/350567)通过显示*为什么*这是一个很好的解决问题的方法,并将使它对未来更有用读者还有其他相似的问题.请[编辑]你的答案,添加一些解释,包括你所做的假设. (6认同)

MD.*_*SAN 6

您可以简单地用于req.query获取查询参数:

app.get('/', (req, res) => {
    let color1 = req.query.color1
    let color2 = req.query.color2
})
Run Code Online (Sandbox Code Playgroud)

该url模块提供了用于 URL 解析和解析的实用程序。不使用 Express 的 URL 解析:

const url = require('url');
const queryString = require('querystring');

let rawUrl = 'https://stackoverflow.com/?page=2&size=3';

let parsedUrl = url.parse(rawUrl);
let parse = queryString.parse(parsedUrl.query);

// parse = { page: '2', size: '3' }
Run Code Online (Sandbox Code Playgroud)

其他方式:

const url = require('url');

app.get('/', (req, res) => {
  const queryObject = url.parse(req.url,true).query;
});
Run Code Online (Sandbox Code Playgroud)

url.parse(req.url,true).query返回{ color1: 'red', color2: 'green' }.
url.parse(req.url,true).host返回'localhost:8080'.
url.parse(req.url,true).search返回“?color1=red&color2=green”。


cyb*_*ogg 5

只需使用app.get:

app.get('/some/page/here', (req, res) => {
    console.log(req.query.color) // Your color value will be displayed
})
Run Code Online (Sandbox Code Playgroud)

你可以在expressjs.com文档api上看到它: http://expressjs.com/en/api.html