【问题标题】:POST form data to server using React.js and Express.js使用 React.js 和 Express.js 将表单数据发布到服务器
【发布时间】:2017-10-03 06:25:57
【问题描述】:

简介

我刚刚开始使用 MERN Stack,目前正在尝试将数据从位于 RegisterModal.js 中的表单发布到 server.js

index.html 文件从渲染 App.js 的 index.js 获取其内容,并根据单击的按钮渲染不同的组件。 (这是我的理解)

其中一个是 RegisterModal.js,我正在尝试将此表单中的数据发布到 server.js

这两个文件的代码都位于下面,我的项目结构如下。 (其余代码位于githubhttp://github.com/yenvanio/testapp


错误

我得到的错误是“无法发布到 /register”,控制台给我一个未找到的错误。


项目结构

 - .idea
 - build
 - node_modules
 - public
   -  index.html
   -  server.js
 - src
   - components
      - AdminLoginModal.js
      - PopUp.js
      - RegisterModal.js
      - UserLoginModal.js
   - App.js
   - index.js
 - package.json

代码

server.js

var express = require('express');
var cors = require('cors');
var mongoose = require('mongoose');
var Schema = mongoose.Schema;
var app = express();

var schema = new Schema({
    user: [
        {
            username: String,
            password: String,
            email: String,
        }
    ]

}, {
    collection: 'users'
});

var Model = mongoose.model('Model', schema);
mongoose.connect('mongodb://localhost:27017/dbName');

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

app.use(bodyParser.json());

app.post("/register", function(request, response){
   var username = request.body.username;
   var password = request.body.password;
   var email = request.body.email;
   console.log("Post Received: %s %s %s", username, password, email);
});

var port = process.env.API_PORT || 3000;
// app.use('/api', router);
app.listen(port, function(){
    console.log("Running on port 3000")
})

RegisterModal.js

import React, { Component } from 'react';

class RegisterModal extends Component
{
    render() {
        return(
            <div>
                <form method="post" action="/register">
                    Email Address:<br/>
                    <input type="text" name="email"/><br/>
                    Username:<br/>
                    <input type="text" name="username"/><br/>
                    Password:<br/>
                    <input type="password" name="password"/><br/>
                    <input type="submit" value="Register"/>
                </form>
             </div>
        );
    }
}

export default RegisterModal;

【问题讨论】:

  • 发帖时是不是没有登陆服务器?您需要在端点中发送某种响应,例如response.send('posted!');
  • 嘿 Rob,感谢您的回复,我已更新我的帖子以包含我收到的错误。我希望你现在能更容易地帮助我。
  • 嘿Heroselohim,感谢您的提示。我会改的

标签: javascript node.js forms express post


【解决方案1】:

您的代码看起来不错。

实际上,我复制粘贴它,我可以毫无问题地运行它。

你确定:

  • 您已重新启动节点进程(包括对 server.js 所做的更改)?
  • 节点进程正在侦听与加载 HTML 页面相同的域/端口?

【讨论】:

  • 嗨 shambalambala,感谢您的回复!我已经重新启动它以确保包含更改。如何确保节点进程正在侦听与 HTML 页面相同的域/端口?当我运行“npm start”时,它在端口 3000 上运行,并且在代码中我也将端口设置为 3000。这是你的意思吗?
  • @Yenvanio HTML 页面的 URL(浏览器地址栏中可见的 URL)是否以 http://localhost:3000 开头?如果不是,那可能是你的问题
  • 是的,它们都是 3000。如果你不介意我问你是如何运行它的?我会试试那个方法。
  • @Yenvanio 我已经为我的一个项目运行了一个快速应用程序。我只是将app.post("/register", ... 块放在我现有的服务器代码中,然后在同一个应用程序的现有HTML 文件中添加表单的HTML 块。加载页面,提交表单,成功了。
  • 为了方便测试你也可以curl -XPOST localhost:3000/register
猜你喜欢
  • 2017-10-17
  • 2021-06-03
  • 1970-01-01
  • 1970-01-01
  • 2020-06-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-07
相关资源
最近更新 更多