axios 节点表达式API将Post请求JSON解析为空

cqoc49vn  于 2023-03-08  发布在  iOS
关注(0)|答案(2)|浏览(167)

我正在创建一个使用Mern堆栈的应用程序,我已经成功地使用axios从react前端向端点发送了POST请求。请参见下面的react前端代码,这是一个表单,它在按钮单击函数上发布了注册证书。

//Register form in react, onclick handler
 handleSubmit(e){
    e.preventDefault();
    const{fname, lname, email, password} = this.state;
    const loginObj = { fname: fname, lname: lname, email: email, password: password};
    console.log(loginObj);

 axios.post('http://localhost:8000/post/members', loginObj);
}

表单中的参数填充了这些状态值,当检查请求负载时,我可以看到从LoginObj对象发送到控制台的相同值。
router.post('/members', getMembers); // this is my route endpoint calling the getMembers function imported

//The method called by the endpoint
export const getMembers = (req, res)=>{
       console.log("you called me ");//this is displayed on the console when the request is sent
       console.log(req.body);// this returns {} no matter what data is sent is the POST request
    }

我希望能够存储POST请求中的值,并读取和写入我的数据库。要做到这些,我首先需要一个API,它可以充分解释POST请求中的值,有人能从上面看到为什么我可能无法从请求的正文中读取任何值吗?

wf82jlnq

wf82jlnq1#

这可能是因为您没有在express服务器中设置解析器中间件,您可以尝试使用express内置的json解析器。(参考:https://expressjs.com/en/4x/api.html#express.json)

app.use(express.json())

如果这还不够,您可以尝试根据您的请求发送内容类型头:

axios.post('http://localhost:8000/post/members', loginObj, {
  headers: {
    'Content-Type': 'application/json'
  }
})
0ejtzxu1

0ejtzxu12#

在express中,我们需要一个主体解析器中间件来提取传入请求的整个主体部分,并将其暴露在req.body上
所以我认为你需要的身体解析器包,一切都会工作得很好,这里是如何安装它的设置

npm i body-parser

在您的index.js在服务器:

const bodyParser = require('body-parser')

const app = express();

app.use(bodyParser.json({extended:true}))
app.use(bodyParser.urlencoded({extended:true}))

相关问题