我是表达和结点的新手,我想在我的服务器上发布axios帖子,但是当我在node.console.login中登录时,req.body变成空的。有人知道我在做什么错吗?我正在控制台记录日志并发送给邮递员。
这是server.js
const app = require('express')()
const bodyParser = require('body-parser');
app.use(bodyParser.json())
app.use(bodyParser.urlencoded({ extended: true }))
app.get('/', (req, res) => {
res.send('hello')
})
const port = 4444;
app.post('/send', (req, res) => {
console.log('body: ', req.body)
res.status(200).send(req.body)
});
app.listen(port, () => {
console.log('We are live on port 4444');
});
我的axios电话
export default class Form extends Component {
constructor(props) {
super(props)
this.state = {
name: 'kaleb',
message: '',
email: '',
number: '',
sent: false
}
}
handleChange = (e) => {
this.setState({
[e.target.name]: e.target.value
})
}
handleSubmit = () => {
axios.post("/send", {name: this.state.name}).then(() => {
console.log(this.state.name)
})
}
答案 0 :(得分:0)
尝试一下 在server.js中:
app.use(bodyParser.json());
app.use(bodyParser.json({type: 'application/*+json'}));
app.use(bodyParser.urlencoded({extended: false}));//or true whatever you need
axios呼叫:
axios({method:'post',url:'/send',data:{name:this.state.name}})
.then(console.log(this.state.name));
答案 1 :(得分:0)
尝试在您的axios调用中将网址作为http://localhost:4444/send
:
handleSubmit = () => {
axios.post("http://localhost:4444/send", {name: this.state.name}).then(() => {
console.log(this.state.name)
})
答案 2 :(得分:0)
好的,这是我在阅读完以上所有评论后的想法。
localhost:3000/server
而不是localhost:4444/server
。现在它将无法正常工作。您需要设置一个代理来避免此问题。这是https://facebook.github.io/create-react-app/docs/proxying-api-requests-in-development的方式。或者,您可以只使用axios.post('http://localhost:4444/server')
注意:如果使用axios.post('http://localhost:4444/server')
,则将面临cors问题。使用它来消除该问题https://www.npmjs.com/package/cors
答案 3 :(得分:0)
这通常是由于将urlencoded扩展名设置为true引起的,请尝试以下操作:
app.use(bodyParser.urlencoded({ extended: false }))