代码之家  ›  专栏  ›  技术社区  ›  Pavindu

nextjs:表单数据未发送到Express服务器

  •  0
  • Pavindu  · 技术社区  · 6 年前

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

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

    enter image description here

    索引文件

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

    服务器,JS

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

    我希望网页显示我在表单的输入域中输入的数据,而只显示几个大括号()。

    1 回复  |  直到 6 年前
        1
  •  1
  •   Faris Tangastani    6 年前

    编辑

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

    要做到这一点,您需要两件事:

    处理输入的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')
      })
    })
    

    希望这有帮助!

    推荐文章