#node.js #reactjs #express
#node.js #reactjs #выразить
Вопрос:
Я все еще изучаю Nodejs и expresjs. С помощью react-facebook-login ответ успешно генерируется из api facebook, который содержит адрес электронной почты, идентификатор пользователя и многое другое. На моей стороне клиента у меня есть действие для отправки запроса на сервер, который содержит состояние входа в Facebook, и у меня есть сервер nodejs для обработки входа в Facebook и проверки. Но на моей стороне сервера мой req.body не улавливает ничего, что является пустым объектом {}. Он продолжает говорить, что это плохой запрос 400. В Postman я могу успешно перехватить его через API. Как мне это исправить? возможно ли быть заблокированным facebook?
изображение, показывающее почтальона
На моей стороне клиента -> action.js,
export const FacebookLoginAction = (facebookLoginState, FbAccessToken, history) => {
return async (dispatch) => {
try {
const Origin = window.location.origin;
const res = await axios.post(`${Origin}/facebook-login`, facebookLoginState, {
headers: {
'Content-Type': 'application/json',
'accept': 'application/json'
},
FbAccessToken
});
const { data } = res;
dispatch({
type: UserActionTypes.FACEBOOK_LOGIN_SUCCESS,
payload: data
});
toast.success(data.status);
history.push("/");
} catch (error) {
if (error.response) {
dispatch({
type: UserActionTypes.FACEBOOK_LOGIN_FAIL,
payload: error.response.data.message,
});
toast.error(error.response.data.message);
}
}
};
};
На моей стороне сервера -> app.js,
const path = require('path');
const express = require('express');
const rateLimit = require('express-rate-limit');
const helmet = require('helmet');
const cookieParser = require('cookie-parser');
const bodyParser = require('body-parser');
const cors = require('cors');
const app = express();
app.enable('trust proxy');
app.set('view engine', 'ejs');
app.use(cors());
app.options('*', cors());
app.use(express.static(path.join(__dirname, 'public')));
app.use(helmet());
// Limit requests from same API
const limiter = rateLimit({
max: 100,
windowMs: 60 * 60 * 1000,
message: 'Too many requests from this IP, please try again in an hour!'
});
app.use('/api', limiter);
app.use(express.json({ limit: '10kb' }));
app.use(express.urlencoded({ extended: true, limit: '10kb' }));
app.use(cookieParser());
app.use('/api/v1/users', userRouter);
module.exports = app;
В моем userRoute.js,
const express = require('express');
const authController = require('./../controllers/authController');
const router = express.Router();
router.post('/facebook-login', authController.facebooklogin);
// rest router ...
module.exports = router;
В моем AuthController,
exports.facebooklogin = catchAsync(async (req, res, next) => {
console.log(req.body); --> empty object
// rest code
});
Комментарии:
1. Вы
console.log(`${Origin}/facebook-login`)
пытались увидеть адрес? Это правильно? Также этоconsole.log(facebookLoginState)
печатает то, что вы ожидаете.2. Адрес — это просто localhost. Запрос api правильный, но каким-то образом req.body является пустым объектом. FacebookLoginState — это электронное письмо, обрабатываемое отправкой формы.