【问题标题】:req.body not working on express router post requestsreq.body 不适用于快速路由器发布请求
【发布时间】:2019-08-03 06:42:39
【问题描述】:

来自 React 前端的发布请求。但是,当我尝试在快速路由器下设置的发布请求中访问 req.body 时,它会简单地记录为 [object Object]。非常感谢初学者程序员的任何帮助!

我正在尝试学习如何在 express.js 应用程序中模块化我的路线,但我无法在 POST 请求中访问 req.body。我花了几个小时试图找到一个没有成功的解决方案。

我 100% 已经安装了 body-parser。

我的 server.js 文件:

const express = require('express');
const app = express();
const router = express.Router();
const PORT = process.env.PORT || 4000;

const cors = require('cors');
const bcrypt = require('bcryptjs');
const passport = require('passport');
const bodyParser = require('body-parser')

app.use(bodyParser.urlencoded({ extended: true }))
app.use(bodyParser.json()); //And so on.
app.use(cors());


// ROUTES - Require Routes defined in directory
const productsRoutes = require('./routes/products')

// ROUTES - use routes defined in directory
app.use('/products', productsRoutes);


app.listen(PORT, () => {
  console.log(`listening on PORT ${PORT}`);
})

路线/产品页面:

const express = require('express');
const router = express.Router();
// const bodyParser = require('body-parser')

router.get('/', ( req, res ) => {
 res.status(200).json({message: 'Connected to the products!' });
})

router.post('/', ( req, res ) => {
  console.log(`req.body ${req.body}`);
  res.status(200).json({message: 'Connected products products!' });
})

module.exports = router;

REACT 前端:

  componentDidMount(){

     axios.post('http://localhost:4000/products', {
       headers: {searchText: this.state.searchText}
     })
     .then( res => {
       console.log('GOT PRODUCTS', res.data);
       this.setState({ products: res.data})
     })
     .then(json => {
        this.setState({ loading: true });
        setTimeout(() => {
           this.setState({ done: true });
        }, 1000);
     });
  }, 1200);
  }

如果有人知道我如何在 router.post('/---') 请求中访问 req.body,我将不胜感激

【问题讨论】:

  • 尝试简单的 console.log(req.body) - 现在你将它记录为字符串,但它是一个对象
  • 好的,Strings 也是 Objects,但是对于日志记录,您应该使用 console.log(“req.body:”, req.body)

标签: javascript node.js express routes


【解决方案1】:

它简单地记录为 [object Object] ...

如果你尝试将一个对象连接到一个字符串会发生什么:

   console.log("you see: " + {});

那是因为{}.toString() 返回字符串"[Object object]"。但这并不是真的有用。相反,您可以判断将对象自己传递console.log,这样它就可以更优雅地显示:

  console.log("result :", { it: "works" });

(如果你连接了一个调试器,你甚至可以与之交互)

【讨论】:

  • OP 是初学者,所以我建议给她/他一个可以复制粘贴的示例 - 详细解释为什么您的代码有效而她/他的代码无效。
  • 但是作为一个老手,我相信你知道 :)
  • @muka.gergely 是的,这正是不提供复制+粘贴示例的原因
猜你喜欢
  • 2018-01-11
  • 2018-11-19
  • 1970-01-01
  • 2022-01-24
  • 1970-01-01
  • 2020-02-27
  • 1970-01-01
  • 1970-01-01
  • 2018-04-05
相关资源
最近更新 更多