0

我不断获取数据:在我的 axios 调用中通过 nodemon 快速调用我的路由时未定义。

axios({
                method: "POST",
                url:"http://localhost:8080/oracle2/search",
                headers: {"Content-Type" : "application/json;charset=utf-8"},
                data: {customer_number: values.custNumber.toString(), last_name: values.last_name}


            })
            .then(console.log('Axios Callback'))
          }

这是我的路线 oracle2:

router.post('/search', (req, res)=> {
    router.use(cors());
    router.use(bodyParser.json({ type: 'application/json' }))
    router.use(bodyParser.urlencoded({ extended: false, type: 'application/json' })) 

console.log(`The data: ${req.body}`)
res.sendStatus(200)

})

邮递员长这样:

标题:

Host: localhost:8080
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:84.0) Gecko/20100101 Firefox/84.0
Accept: application/json, text/plain, */*
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Referer: http://localhost:3000/
Content-Type: application/json;charset=utf-8
Content-Length: 51
Origin: http://localhost:3000

身体看起来像这样:

{"customer_number":"120231546","last_name":"Smith"}

任何帮助,将不胜感激。使用 Formik 值作为输入响应前端

4

1 回答 1

0

这条路线不正确:

router.post('/search', (req, res)=> {
    router.use(cors());
    router.use(bodyParser.json({ type: 'application/json' }))
    router.use(bodyParser.urlencoded({ extended: false, type: 'application/json' })) 

    console.log(`The data: ${req.body}`)
    res.sendStatus(200)
});

这根本不是您使用中间件的方式。您没有router.use()在路由处理程序中定义语句。这将无法正常工作,并且每次运行路线时都会一遍又一遍地定义它们,从而导致它们永远建立起来。通常,您可以通过以下方式在全局范围内或跨多个路由应用这种类型的中间件:

router.use(cors());
router.use(bodyParser.json({ type: 'application/json' }))
router.use(bodyParser.urlencoded({ extended: false, type: 'application/json' })) 

在任何路由处理程序之外,例如:

router.use(cors());
router.use(bodyParser.json({ type: 'application/json' }));
router.use(bodyParser.urlencoded({ extended: false, type: 'application/json'})); 

router.post('/search', (req, res)=> {
    console.log('The data:', req.body);
    res.sendStatus(200);
});

或者,如果您真的希望中间件仅对一条路线有效,那么您可以这样做:

router.post(
    '/search', 
    bodyParser.json({ type: 'application/json' }),
    bodyParser.urlencoded({ extended: false, type: 'application/json'}),
    (req, res)=> {
      console.log('The data:', req.body);
      res.sendStatus(200);    
});

请注意,我还更改了输出内容的方式,req.body因为它将是一个对象,这实际上会在控制台中显示该对象的内容。

于 2021-01-22T07:27:06.747 回答