【问题标题】:NextJS: Form data isn't sent to the express serverNextJS:表单数据未发送到快递服务器
【发布时间】:2019-06-06 10:06:27
【问题描述】:

我正在尝试在 Nextjs/express 应用程序中将表单数据发送到服务器。当我按下“提交”时,我看不到任何输出发送到服务器。

我尝试了以下代码,但没有成功,我不明白为什么它不起作用,因为我完全是这个堆栈的新手。我的项目的文件结构如下。

index.js

class Index extends Component{

render(){
return(
    <form action="/server" method="post">
        <input type="text" id="name"></input>
        <input type="submit"/>
    </form>
);
}
}

server.js

server.post('/server', (req, res) => {
    const name  = req.body
    res.send(name)
})

我希望网页显示我在表单的输入字段中输入的数据。相反,它只显示一对花括号 ({})。

【问题讨论】:

    标签: forms express next.js


    【解决方案1】:

    编辑

    我在前端和后端切换了您的示例存储库中的一些内容。您可以在代码示例中看到它们!

    为了做到这一点,你需要两件事:

    处理输入的 onChange 处理程序和处理向服务器提交的 onSubmit 处理程序。这是我对您的示例的实现。

    class Index extends Component {
        constructor() {
        super();
        this.state = {
            firstName: '',
        };
    }
    handleChange = evt => {
    // This triggers everytime the input is changed
        this.setState({
            [evt.target.name]: evt.target.value,
        });
    };
     handleSubmit = evt => {
          evt.preventDefault();
          //making a post request with the fetch API
          fetch('/server', {
            method: 'POST',
            headers: {
                  'Accept': 'application/json',
                  'Content-Type': 'application/json'
            }, 
            body: JSON.stringify({
                 firstName:this.state.firstName
               })
            })
            .then(response => response.json())
            .then(data => console.log(data))
            .catch(error => console.log(error))
         });
      };
    render(){
      return(
        <form onSubmit={this.handleSubmit} >
            <input 
                name="firstName" 
                type="text" 
                id="name" 
                value={this.state.firstName} 
                onChange={this.handleChange}>
            </input>
            <input type="submit"/>
        </form>
        );
      }
    }
    

    您的服务器代码:

    const express = require('express')
    const next = require('next')
    const bodyParser = require('body-parser')
    
    const dev = process.env.NODE_ENV !== 'production'
    const app = next({ dev })
    const handle = app.getRequestHandler()
    
    app.prepare().then(() => {
      const server = express()
      server.use(bodyParser.urlencoded({ extended: true }))
      server.use(bodyParser.json())
    
      server.post('/server', (req, res) => {
        console.log(req.body)
        const firstName = req.body.firstName
        res.send({firstName})
    })
    
      server.get('*', (req, res) => {
        return handle(req, res)
      })
    
      server.listen(3000, (err) => {
        if (err) throw err
        console.log('> Read on http://localhost:3000')
      })
    })
    

    希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-21
      • 2020-05-01
      • 1970-01-01
      • 2019-05-27
      • 1970-01-01
      相关资源
      最近更新 更多