Серверная часть Nodejs получает пустое тело запроса

#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 — это электронное письмо, обрабатываемое отправкой формы.