Node.js node js req.body空返回
我有一个很奇怪的问题,我已经用同样的方法做了一些表格,一切都很好。。 我将尝试给你一些代码: 后端路由器js:Node.js node js req.body空返回,node.js,reactjs,mongodb,Node.js,Reactjs,Mongodb,我有一个很奇怪的问题,我已经用同样的方法做了一些表格,一切都很好。。 我将尝试给你一些代码: 后端路由器js: const express = require('express'); const { check } = require('express-validator'); const chatControllers = require('../controllers/chat-controllers'); const checkAuth = require('../middleware/
const express = require('express');
const { check } = require('express-validator');
const chatControllers = require('../controllers/chat-controllers');
const checkAuth = require('../middleware/check-auth');
const router = express.Router();
router.get('/', chatControllers.getChat);
router.use(checkAuth);
router.post(
'/',
[
check('message')
.not()
.isEmpty()
],
chatControllers.createChat
);
module.exports = router;
后端控制器js:
const createChat = async (req, res, next) => {
const errors = validationResult(req);
if (!errors.isEmpty()) {
return next(
new HttpError('Invalid, please check your data.', 422)
);
}
const { message } = req.body;
const createdChat = new Chat({
message,
creator: req.userData.userId
});
let user;
try {
user = await User.findById(req.userData.userId);
} catch (err) {
const error = new HttpError(
'Creating message failed, please try again.',
500
);
return next(error);
}
if (!user) {
const error = new HttpError('Could not find user for provided id.', 404);
return next(error);
}
try {
const sess = await mongoose.startSession();
sess.startTransaction();
await createdChat.save({ session: sess });
} catch (err) {
const error = new HttpError(
'Creating message failed, please try again.',
500
);
return next(error);
}
res.status(201).json({ chat: createdChat });
};
及前端表格:
const Chat = () => {
const auth = useContext(AuthContext);
const { isLoading, error, sendRequest, clearError } = useHttpClient();
const [formState, inputHandler] = useForm(
{
message: {
value: '',
isValid: false
}
},
false
);
const chatSubmitHandler = async event => {
event.preventDefault();
try {
const formData = new FormData();
formData.append('message', formState.inputs.message.value);
await sendRequest('http://localhost:5000/api/chat', 'POST', formData, {
Authorization: 'Bearer ' + auth.token
});
} catch (err) {}
};
return (
<React.Fragment>
<Helmet>
<title></title>
</Helmet>
<ErrorModal error={error} onClear={clearError} />
<div className="container">
<h1>CHAT</h1>
<form className="chat-form" onSubmit={chatSubmitHandler}>
<Input
id="message"
element="input"
type="text"
label="Message"
validators={[VALIDATOR_REQUIRE()]}
errorText="Please enter message."
onInput={inputHandler}
/>
<Button type="submit" disabled={!formState.isValid}>
SEND
</Button>
</form>
<div className="chat-body overflow-auto">
message body
</div>
</div>
</React.Fragment>
);
};
export default Chat;
const Chat=()=>{
const auth=useContext(AuthContext);
const{isLoading,error,sendRequest,clearError}=useHttpClient();
const[formState,inputHandler]=useForm(
{
信息:{
值:“”,
isValid:false
}
},
假的
);
const chatSubmitHandler=异步事件=>{
event.preventDefault();
试一试{
const formData=new formData();
append('message',formState.inputs.message.value);
等待发送请求('http://localhost:5000/api/chat“,”POST“,formData{
授权:“持票人”+auth.token
});
}捕获(错误){}
};
返回(
聊天
发送
消息体
);
};
导出默认聊天;
在应用程序js中,我已经要求聊天路由,并且我设置了标题和正文解析器,但在其他页面上非常奇怪一切正常,但在这里我无法检索req.body
@我甚至无法处理形成成功的错误:无效,请检查您的数据。我认为当我console.log req看到req.body为空时,这个输入就有问题了。在express server应用程序中需要某种请求负载解析器中间件。解析器实际解析主体,并在
请求
对象上创建名为body
的属性。通常对于采用JSON作为请求主体的API,我们需要使用bodyparser
中间件,如下所示:
import bodyParser from 'body-parser';
// And then
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
但是如果你想使用多部分表单数据,那么你可以使用
强大的作为中间件。这看起来非常奇怪,我将在这里发布我的app.js:
const fs = require('fs');
const path = require('path');
const express = require('express');
const bodyParser = require('body-parser');
const mongoose = require('mongoose');
const companiesRoutes = require('./routes/companies-routes');
const usersRoutes = require('./routes/users-routes');
const adsRoutes = require('./routes/ads-routes');
const chatRoutes = require('./routes/chat-routes');
const HttpError = require('./models/http-error');
const { check } = require('express-validator');
const app = express();
const server = require("http").createServer(app);
const io = require("socket.io")(server, {
cors: {
origin: "http://localhost:3000",
methods: ["GET", "POST"],
credentials: true
}
});
app.use(bodyParser.json());
app.use('/uploads/images', express.static(path.join('uploads', 'images')));
app.use('/uploads/videos', express.static(path.join('uploads', 'videos')));
app.use((req, res, next) => {
res.setHeader('Access-Control-Allow-Origin', '*');
res.setHeader(
'Access-Control-Allow-Headers',
'Origin, X-Requested-With, Content-Type, Accept, Authorization'
);
res.setHeader('Access-Control-Allow-Methods', 'GET, POST, PATCH, DELETE');
next();
});
app.use('/api/companies', companiesRoutes);
app.use('/api/users', usersRoutes);
app.use('/api/ads', adsRoutes);
app.use('/api/chat', chatRoutes);
app.use((req, res, next) => {
const error = new HttpError('Could not find this route.', 404);
throw error;
});
app.use((error, req, res, next) => {
if (req.file) {
fs.unlink(req.file.path, err => {
console.log(err);
});
}
if (res.headerSent) {
return next(error);
}
res.status(error.code || 500);
res.json({ message: error.message || 'An unknown error occurred!' });
});
mongoose
.connect('mongodburllink', { useNewUrlParser: true })
.then(() => {
server.listen(5000);
})
.catch(err => {
console.log(err);
});
我有和其他表单用于创建和更新,一切都很好,但在我上次聊天中,我无法检索请求正文。。我使用快速验证器获取请求体。。。看起来我在这里遗漏了一些东西,我在第一篇文章中发布了其他文件的完整代码,因此如果有人可以帮助我,我将是满满的。我已经在app.js中完成了这一部分-这很奇怪,因为在其他表单中,我一切正常,我得到了req.body,但在这篇文章中,它是空的……我在我的示例中遗漏了什么吗,我仍然没有解决这个问题…颠簸!!!我仍然没有解决这个问题。。。