首页 > 解决方案 > 从 Axios/React 将 json 发布到 Node/Express 服务器的问题

问题描述

我目前正在使用 Node.js 在后端使用 Express 并在前端使用 React.js 来开发 Web 应用程序。在尝试通过 axios 将用户数据发布到节点服务器时,我遇到了一个问题。当我使用 x-www-form-urlencoded 内容类型发布帖子时,前端将发布到服务器,但发布数据的整个 JSON 出现在第一个元素的关键字段中。当我将内容类型更改为 json 时,它会停止从前端发布任何内容。我已经尝试卷曲到服务器,并且卷曲 JSON 帖子将被服务器接受。

反应代码发布到服务器

handleSubmit()
  {
    var form=this;
    var axiosConfig = {
      headers: {
        'content-type': 'application/json; charset=utf-8'
      }
    }

    axios.post('http://localhost:8080/api/login/', {
      'username': form.state.username,
      'password': form.state.password
    }, {headers: {'content-type': 'application/json'}});

  };

api 端点的服务器代码

//From server.js
const express=require('express');
const session=require('express-session');
const bodyParser=require("body-parser");
const path = require('path');

var login = require('./routers/login')

var port = process.env.PORT || 8080;
var app=express();

app.use(session({'secret': 'thealphabetbackwardsiszyxwvutsrqponmlkjihgfedcba'}));
app.use(bodyParser.urlencoded({ extended: true}));
app.use(bodyParser.json());

//...

app.use('/api/login', login);

//from login.js
/* Router for login system
   When user attempts to log in, check their credentials
   If the user successfully logs in, create a session
   If user enters invalid credentials prompt them
*/

const path = require('path');
const bodyParser = require('body-parser');
const mongoose = require('mongoose');
const user = require("./../models/UserSchema")
mongoose.connect('mongodb://localhost/newt');

const express = require('express');
const router = express.Router();

router.get('/', function (req, res)
{
  console.log("Test");
})

router.post('/', function(req, res)
{
  console.log(req.body);
  res.end();
})

// To create test user use path localhost:8080/api/login/testing
router.get('/test', function (req, res)
{
  var db = mongoose.connection;

  var test = new user({
    username: "joesephschomseph",
    email: "testUser@test.com",
    fname: "Joe",
    lname: "Schmoe"
})

test.save();

console.log("Created test user!");
});


module.exports = router

标签: node.jsreactjspostaxios

解决方案


  1. npm install --save const body-parser
  2. 在 app.js 中包含 const bodyparser = require('body-parser');
  3. app.use(bodyparser.urlencoded({ extended: false }));
    app.use(bodyparser.json());
    
  4. 从您的“用户名”和“密码”中删除单引号

  5. 控制台.log(req.body);

推荐阅读