我知道如何获取查询的参数,像这样:

app.get('/sample/:id', routes.sample);

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

然而,对于/sample/2这样的url ?color=红色,我怎么能访问变量颜色?

我试过req.params.color,但不起作用。


当前回答

使用要求。查询,用于获取路由中查询字符串参数中的值。 参考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);

});

其他回答

您可以简单地使用req。查询get查询参数:

app.get('/', (req, res) => {
    let color1 = req.query.color1
    let color2 = req.query.color2
})

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

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' }

另一种方法:

const url = require('url');

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

url.parse (req.url,真)。查询返回{color1: '红色',color2: '绿色'}。 url.parse (req.url,真)。主机返回'localhost:8080'。 url.parse (req.url,真)。搜索返回'?color1=red&color2=green'。

更新:req.param()现在已弃用,所以以后不要使用这个答案。


你的答案是首选的方式,但我想我要指出,你也可以访问url, post和路由参数都与req。参数(parameterName defaultValue)。

在你的情况下:

var color = req.param('color');

速递指南:

查找的顺序如下: req.params req.body req.query

注意,指南中有如下规定:

直接访问请求。身体,点播。Params和req。查询应该是 有利于清晰-除非你真正接受来自每个对象的输入。

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

因此,在检出express引用之后,我发现req.query.color将返回我正在寻找的值。

要求的事情。params指的是URL和req中带有“:”的项。查询引用与'?'相关的项

例子:

GET /something?color1=red&color2=blue

然后在express中,处理程序:

app.get('/something', (req, res) => {
    req.query.color1 === 'red'  // true
    req.query.color2 === 'blue' // true
})
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!')
)

只需使用app.get:

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

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