表达:req.params返回未定义

时间:2019-05-24 17:59:32

标签: javascript node.js regex reactjs express

在使用url参数的服务器端获得简单的get方法,并请求该URL的客户端请求(反应),但是问题是服务器返回的参数不确定。这是代码:

服务器(index.js):

router.use('/api/info/:name/:id', require('./info'))`

info.js:

router.get('/', async (req, res) => {
try {
   const name = req.params.name;
   const id = req.params.id;
   console.log('name ' + name +'  id  ' + id)

    return res.status(200).send({
       id: id,
       name: name
    })
} catch (err) {
    return res.status(500).send({
      message: err.message
    })
  }
})

和客户端(ReactJS):

componentDidMount(){
 const { match: { params } } = this.props;
    axios.get(`/api/recipe/${params.name}/${params.id}`)              
      .then(res => res.data)
      .then(data =>{
         console.log(data)
    })      
}

并且正如我所说的,此代码在服务器端返回的名称和ID均未定义,但是客户端可以正常工作(我已将其记录下来并且有效)。在控制台中,它也会给我这个错误(DevTools的控制台)

未捕获(承诺)错误:请求失败,状态码为500

怎么了?谢谢!

3 个答案:

答案 0 :(得分:0)

您在index.js中定义的路由为/api/info/title/:id,但是您正在对/api/recipe/${params.name}/${params.id}进行API调用。您的路线不匹配,并且没有将:name定义为参数。

除非这是您的错字,否则更改router.use代码以匹配您的API调用应该可以:

router.use('/api/recipe/:name/:id', require('./info'));

答案 1 :(得分:0)

这里是如何设置带有参数的路由,然后使用express在中间件内部进行访问。

首先,我们需要定义一条路线:

app.use('/users', User)

只要您在'/ users'上收到请求,此代码行就告诉Express使用User控制器来处理它。现在让我们编写控制器。

const User = express.Router()
User.route('/:name/:id')
    .get(getUsers)

现在,每次有人向/users发出请求时,都会调用User控制器,并且每次向/users/:name/:id我们的中间件getUsers发出请求时,都会调用该控制器。现在,在getUsers内部,将名称和ID发送回响应中。

const getUsers = (req,res) =>{
    res.status(200).json({
        id : req.params.id,
        name: req.params.name
    })
}

答案 2 :(得分:0)

您没有告诉Express期望参数(请参见here的“参数”部分),您将需要以下内容:

router.get('/:name/:id', async (req, res) => { ... })