#node.js #reactjs #redux
#node.js #reactjs #redux
Вопрос:
Ну, в StackOverflow есть много вопросов об этой ошибке, я видел их все, ни один из них не работает для меня. Я использую react с redux, пытаясь получить некоторые продукты. мой серверный серверный узел работает на порту 5000, и я использую его одновременно для одновременного запуска обоих серверов всякий раз, когда я пытаюсь получить данные, используя порт 3000, где работает мой интерфейс. Пожалуйста, кто-нибудь, помогите мне решить эту проблему
файл package.json
{
"name": "proshop",
"version": "1.0.0",
"description": "MERN application named proshop",
"main": "server.js",
"type": "module",
"scripts": {
"start": "node backend/server",
"server": "nodemon backend/server",
"client": "npm start --prefix frontend",
"dev": "concurrently "npm run server" "npm run client"",
"data:import": "node backend/seeder",
"data:destroy": "node backend/seeder -d"
},
"keywords": [
"NodeJS",
"ExpressJs",
"React",
"Redux",
"MongoDb"
],
"author": "Narayan Maity",
"license": "ISC",
"dependencies": {
"bcryptjs": "^2.4.3",
"colors": "^1.4.0",
"concurrently": "^5.3.0",
"dotenv": "^8.2.0",
"express": "^4.17.1",
"express-async-handler": "^1.1.4",
"mongoose": "^5.10.9"
},
"devDependencies": {
"nodemon": "^2.0.6"
}
}
Вот мой productsAction.js файл
import axios from 'axios';
import {
PRODUCT_LIST_FAIL,
PRODUCT_LIST_REQUEST,
PRODUCT_LIST_SUCCESS,
} from '../constants/productConstants';
export const listProducts = () => async (dispatch) => {
try {
dispatch({ type: PRODUCT_LIST_REQUEST });
const { data } = await axios.get('http://localhost:5000/api/products');
dispatch({ type: PRODUCT_LIST_SUCCESS, payload: data });
} catch (error) {
dispatch({
type: PRODUCT_LIST_FAIL,
payload:
error.response amp;amp; error.response.data.message
? error.response.data.message
: error.message,
});
}
};
Если я использую полный адрес, например HTTP://localhost:5000/api/products это дает мне ошибку CORS
Комментарии:
1. в
react
client
папке или добавьте новуюkey
иvalue
пару"proxy": "http://localhost:5000"
в своюpackage.json
. Тогда вы можете просто сделатьawait axios.get('/api/products')
2. спасибо @lala, это сработало, пожалуйста, отправьте сообщение в качестве ответа, чтобы я мог принять
Ответ №1:
Это было бы намного проще, и focus
если вы добавите "proxy": "http://localhost:5000"
в свою client
или react
папку проекта, например:-
client/package.json
{
"name": "projectname",
"version": "0.1.0",
"private": true,
"dependencies": {
...}
"proxy": "http://localhost:5000"
}
Тогда вы можете просто сделать:-
await axios.get('/api/products') // straight away use whatever path you've specified
Комментарии:
1. я добавил прокси, но получаю сообщение об ошибке, и в браузере появляется этот код try { dispatch({ type: PRODUCT_LIST_REQUEST }) const { data } = await axios.get(‘/api/products’) dispatch({ type: PRODUCT_LIST_SUCCESS, полезная нагрузка: данные }) } catch (ошибка) { отправка({ тип: PRODUCT_LIST_FAIL, полезная нагрузка: ошибка.ответ amp;amp; ошибка.ответ.данные.сообщение? error.response.data.message: ошибка.message, }) } } я установил для своего прокси значение «proxy»: » localhost: 5000 «, но все равно получаю ошибку
2. Ошибки CORS ? или другая ошибка? Можете ли вы также обновить свой код выше
3. импорт axios из ‘axios’ импорт { PRODUCT_LIST_REQUEST, PRODUCT_LIST_SUCCESS, PRODUCT_LIST_FAIL, } из ‘../constants/productConstants’ экспорт const listProducts = () => асинхронный (отправка) => { попробуйте { отправка ({ тип: PRODUCT_LIST_REQUEST }) const { data } = ожидание axios.get(‘/api / products’) отправка ({ тип: PRODUCT_LIST_SUCCESS, полезная нагрузка: данные }) } перехват (ошибка) { отправка ({ тип: PRODUCT_LIST_FAIL, полезная нагрузка: ошибка.ответ amp;amp; ошибка.ответ.данные.сообщение? ошибка.ответ.данные.сообщение: ошибка.сообщение, }) } }
4. Ошибка: объекты недопустимы как дочерние элементы React (найдено: объект с ключами {}). Если вы хотели отобразить коллекцию дочерних элементов, вместо этого используйте массив.
5. дело в том, когда возникает ошибка с использованием приведенного ниже кода: import express from ‘express’ import AsyncHandler from ‘express-async-handler’ import Product from ‘ ../models/productModel.js ‘const маршрутизатор = экспресс. Router() //@desc извлекает все продукты //@route GET /api/products //@access Public router.get(‘/’, AsyncHandler(async (req, res) => {const products = await Product.find({}) выдает новую ошибку (‘НекоторыеОшибка’) res.json(products) })) я получаю сообщение об ошибке, но когда я удаляю строку, она работает нормально, когда выдает ошибку, она ищет данные из: 3000/ api /products