NextJS:表单数据未发送到快递服务器
NextJS: Form data isn't sent to the express server
我正在尝试将表单数据发送到 Nextjs/express app.When 中的服务器 我按 'submit',我看不到任何输出被发送到服务器。
我尝试了以下代码但没有成功,我不明白为什么它不起作用,因为我完全是这个 stack.File 我项目结构的新手,如下所示。
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)
})
我希望网页显示我在 form.instead 的输入字段中输入的数据,它只显示一对花括号 ( {} )。
编辑
我在前端和后端切换了您的示例存储库中的一些内容。您可以在代码示例中看到它们!
为此,您需要两件事:
用于处理输入的 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')
})
})
希望对您有所帮助!
我正在尝试将表单数据发送到 Nextjs/express app.When 中的服务器 我按 'submit',我看不到任何输出被发送到服务器。
我尝试了以下代码但没有成功,我不明白为什么它不起作用,因为我完全是这个 stack.File 我项目结构的新手,如下所示。
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)
})
我希望网页显示我在 form.instead 的输入字段中输入的数据,它只显示一对花括号 ( {} )。
编辑
我在前端和后端切换了您的示例存储库中的一些内容。您可以在代码示例中看到它们!
为此,您需要两件事:
用于处理输入的 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')
})
})
希望对您有所帮助!