React proxy localhost не работает, почему ?? MacOS Catalina - PullRequest
2 голосов
/ 30 мая 2020

У меня проблема с объединением внешнего интерфейса и внутреннего интерфейса в React framework. Я открыл 3 терминала с: 1. клиентской стороной, 2. стороной базы данных и третьим - с запущенным mongodb (sudo mongod --dbpath /System/Volumes/Data/data/db вместо mongod из-за обновления Catalina). Я не могу изменить localhost: 3000 на localhost: 8000, не знаю почему. Есть предложения?

Вот коды от клиента и сервера:

Клиент:

const name = match.params.name;
const article = articleContent.find(article => article.name === name);

const [articleInfo, setArticleInfo] = useState({ upvotes: 0, comments: [] });

useEffect(() => {
    const fetchData = async () => {
        const result = await fetch(`/api/article/${name}`);
        const body = await result.json();
        console.log(body);
        setArticleInfo(body);
    }
    fetchData();
}, [name]);

пакет. json:

"proxy": "http://localhost:8000/",

Сервер:

    app.post('/api/articles/:name/upvote', async (req, res) => {

    withDB(async (db) => {
        const articleName = req.params.name;

        const articleInfo = await db.collection('articles').findOne({ name: articleName });
        await db.collection('articles').updateOne({ name: articleName }, {
            '$set': {
                upvotes: articleInfo.upvotes + 1,
            },
        });
        const updatedArticleInfo = await db.collection('articles').findOne({ name: articleName });

        res.status(200).json(updatedArticleInfo);
    }, res);
});

app.post('/api/articles/:name/add-comment', (req, res) => {
    const { username, text } = req.body;
    const articleName = req.params.name;

    withDB(async (db) => {
        const articleInfo = await db.collection('articles').findOne({ name: articleName });
        await db.collection('articles').updateOne({ name: articleName }, {
            '$set': {
                comments: articleInfo.comments.concat({ username, text }),
            },
        });
        const updatedArticleInfo = await db.collection('articles').findOne({ name: articleName });

        res.status(200).json(updatedArticleInfo);
    }, res);
});

app.listen(8000, () => console.log('Listening on port 8000'));

Клиент запускается по команде basi c: npm запуск, Запуск сервера командой: npx nodemon --exe c npx babel-node src / server. js

Используя программу Postman, сервер работает правильно, получая +1 каждый раз для функции app.post, а также добавляя комментарии и т. Д. c.

1 Ответ

1 голос
/ 30 мая 2020

, если вы собираетесь использовать

proxy": "http://localhost:8000/"

в качестве прокси, тогда на Node ваш маршрут не должен начинаться с /, потому что это будет http://localhost:8000//api/articles/:name/upvote (обратите внимание на дополнительный /)

, так что это должно быть

app.post('api/articles/:name/upvote', async (req, res) => {

, и чтобы изменить номер ПОРТА по умолчанию, попробуйте добавить порт в сценарий start в package.json файле

"scripts": {
   "start": "PORT=3000 react-scripts start",
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...