javascript - 无法使用 React 将数据发布到 Express

标签 javascript reactjs express axios

这是我第一次尝试制作全栈应用程序。我已经有 Django 的经验,但现在我想尝试使用 Express.js 所以,我在express中做了这个简单的路线:

var express = require('express');
var app = express();
var bodyParser = require('body-parser');
var logger = require('morgan');

var User = require('../User/User');


app.use(logger("short"));

app.post("/addUser", (req, res) => {
User.create({
    name: req.body.name,
    email: req.body.email,
    password: req.body.password
}, (err, user) => {
    if (err) return res.status(500).json({auth: false})
    res.status(200).json(
        {
            email,
            name
        }
        );
    });
});

这是用户架构:

const mongoose = require("mongoose")
const Schema = mongoose.Schema;

const UserSchema = new Schema(
    {
        name: String,
        email: String,
        password: String,
    },
    {timestamps: true}
);
mongoose.model("User", UserSchema);

module.exports = mongoose.model("User");

我已经尝试使用 insomnia 来执行一些发布请求。他们都工作了 但是当我使用 React 发出发布请求时,它会创建一个对象,但其名称、电子邮件、密码字段为空,如下所示:

createdAt: "2018-11-22T16:59:51.844Z"
updatedAt: "2018-11-22T16:59:51.844Z"
__v: 0
_id: "5bf6e0878bd6663807e57dec"

这是我的 react 代码 - 它位于提交表单时调用的函数中 - (我已经添加了 Express 服务器作为代理):

    axios.post('/api/auth/addUser', {
        name:  register_name,
        email: register_email,
        password: register_password
    })
    .then(res => res.json())
    .catch(err => console.log(err))

我在 Express 控制台上收到代码 200,但 obj 没有任何数据。 你能帮助我吗? - 我还是 React 和 Express 的初学者

编辑:React 组件

import React, { Component } from 'react';
import axios from 'axios';

export default class Register extends Component {
    constructor(props) {
        super(props)
       this.state = {
        register_name: "",
        register_email: "",
        register_password: ""
    }

        this.handleChange = this.handleChange.bind(this);
        this.handleSubmit = this.handleSubmit.bind(this);

    }

    handleChange(event) {
        this.setState({[event.target.name]: event.target.value})
    }

    handleSubmit(event) {
    event.preventDefault();
    const { register_name, register_email, register_password } = this.state
    axios.post('/api/auth/addUser', {
        name:  register_name,
        email: register_email,
        password: register_password
    })
    .then(res => res.json())
    .catch(err => console.log(err))

    console.log(this.state)

    this.clearInputs();

}

    render() {
        return (
        <div>
            <form method={"POST"} onSubmit={this.handleSubmit} id={"register-form"}>
                <label htmlFor={"register_name"}></label>
                <input type={"text"} name={"register_name"} id={"register_name"} placeholder={"name"} value={this.state.register_name} onChange={this.handleChange}></input>
                <label htmlFor={"register_email"}>Email</label>
                <input type={"email"} name={"register_email"} id={"register_email"} placeholder={"email"} value={this.state.register_email} onChange={this.handleChange}></input>
                <label htmlFor={"register_password"} >Password</label>
                <input type={"password"} name={"register_password"} id={"register_password"} placeholder={"password"} value={this.state.register_password} onChange={this.handleChange}></input>
                <button type={"submit"}>Submit</button>
            </form>
        </div>
    )
}

}

最佳答案

您正在使用已更改的 input 元素的 [event.target.id] 来更新状态。

声明需要名称电子邮件密码,但收到register_name注册电子邮件注册密码

您应该更改 input 元素的 id 以匹配状态中的元素,或者您应该使用 name 属性,因为这就是匹配。

this.setState({[event.target.name]: event.target.value});
<小时/>

请记住,label 元素的属性 htmlFor 还需要匹配 id 而不是 name 所链接元素的代码。

<小时/>

此外,您应该已经注意到有些问题,因为您的代码在您键入时不会更新 input 元素。

关于javascript - 无法使用 React 将数据发布到 Express,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53435712/

相关文章:

javascript - 协助在我的本地主机应用程序上下载文件

javascript - 已加载另一出版物后订阅另一出版物 | React-Meteor

javascript - React Hooks 和 UseEffect 不使用 socketIO 数据更新显示。只渲染数组中的元素

node.js - 企业iOS应用发布,需要一个https服务器,如何用express.js设置?

javascript - 获取复选框的值并执行计算

php - 如何只允许从我的服务器上的文件调用 PHP 脚本?

javascript - fancybox 内的 Fancybox(或嵌套的 fancybox)

javascript - ES6 类方法和 React 是否使用粗箭头语法有功能上的区别吗?

javascript - 在 Windows 上,发送并返回 CORS 预检 OPTIONS 请求,但随后 PUT 请求将无限期挂起 'pending'

node.js - 渲染页面时不添加样式