NextJS:表单数据未发送到快递服务器

时间:2019-01-11 13:14:18

标签: forms express next.js

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

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

enter image description here

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)
})

我希望网页以表格形式显示我输入到输入字段中的数据。相反,它只显示几个花括号({})。

1 个答案:

答案 0 :(得分: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')
  })
})

希望这会有所帮助!