首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将带有ReactJS的formData发送到Express API并获取响应的JSON

将带有ReactJS的formData发送到Express API并获取响应的JSON
EN

Stack Overflow用户
提问于 2018-12-14 08:59:43
回答 1查看 1.5K关注 0票数 2

尝试让JSON前端通过代理将表单中的用户名和密码发送到我的express api,然后让API中的app.post返回一个用户id的ReactJS文件。代理连接工作正常,但当我将用户名和密码状态发送到API时,它在另一端显示为“未定义”。不确定这是我的处理程序、事件代码/表单还是我的express API的问题。

ReactJS:

代码语言:javascript
运行
复制
import React, { Component } from 'react'
import '../public/styles/App.css'
import Header from "./header.js"

var recID = []

export default class Login extends Component {

    constructor() {
        super()
        this.state = {
            isLoggedIn: false,
            username: "",
            password: "",
            user: []
        }

        this.checkLogin = this.checkLogin.bind(this)
        this.handleUsernameChange = this.handleUsernameChange.bind(this)
        this.handlePasswordChange = this.handlePasswordChange.bind(this)
    }

    handleUsernameChange = (e) => {
        this.setState({username: e.target.value});
    }

    handlePasswordChange = (e) => {
        this.setState({password: e.target.value});
    }

    checkLogin(e) {
        e.preventDefault()
        fetch('/api/login', {
            method: 'POST',
            body: JSON.stringify({"user": this.state.username, "pass": this.state.password}),
            headers: {'Content-Type': 'application/json'}
        })
        .then(response => response.json())
        .then(user_id => this.setState({user: user_id}))
        recID = recID.concat(this.state.user)
        if (recID.length == 6) {
            this.setState({isLoggedIn: true})
        }
    }

    loginScreen() {
        return(   
            <div style={{border:"none"}}>
                <div style={{background:"white"}}>
                <br></br>
                    <center><Header /></center>
                <br></br>
            </div>
            <br></br>
            <br></br>
            <div style={{background:"white"}}>
                <center><form onSubmit={e => this.checkLogin(e)}>
                    <br></br>
                    Username: <br></br>
                    <input type = "text" name= "username" onChange={this.handleUsernameChange}></input>
                    <br></br>
                    <br></br>
                    Password: <br></br>
                    <input type = "text" name = "password" onChange={this.handlePasswordChange}></input>
                    <br></br>
                    <br></br>
                    <input type = "submit" value = "Log-in"></input>
                    <br></br>
                </form></center>
                <br></br>
            </div>
        </div>
    )
}

    success() {
        return (
            <div>
              <p>TEST</p>
              {this.state.user && this.state.user.map(us => <div key={us.user_id}> {us.user_id} </div>)}
            </div>
          )
    }

    render() {
            if (this.state.isLoggedIn == true) {
                return (
                    this.success()
                )
            }
            else {
                return (
                    this.loginScreen()
                )
            }
    }
}

相关NodeJS接口代码:

代码语言:javascript
运行
复制
'use strict'

const express = require('express')
const bodyParser = require('body-parser')

const users = require('./modules/user_management.js')

const app = express()
const port = 8080

app.use(bodyParser.urlencoded({extended: false}))

app.post("/api/login", async(req, res) => {
    const id = await users.login(req.body.user, req.body.pass)
    console.log(id)
    res.json(id)
})

app.listen(port, () => console.log(`Server is listening on port ${port}`))
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-12-14 09:34:37

在Node.js文件中,确保添加:

代码语言:javascript
运行
复制
app.use(bodyParser.json());

因为它当前仅被设置为解析up编码的输入。

此外,如果这不起作用,请尝试删除fetch函数中的JSON.stringify,因为我不确定是否有必要这样做,因为您已经在使用正文解析器。

编辑--没关系,在这一点上我错了。JSON.stringify应该留在原始的fetch调用中。

如果这两个都不起作用,请让我知道,我很乐意提出一些额外的建议。

干杯,加布

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53772192

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档