Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 19.05.2023, 21:19
Аспирант
Отправить личное сообщение для riaron86 Посмотреть профиль Найти все сообщения от riaron86
 
Регистрация: 27.11.2021
Сообщений: 41

вот весь пароект
https://dropmefiles.com/smOr9
Ответить с цитированием
  #12 (permalink)  
Старый 22.05.2023, 10:07
Аспирант
Отправить личное сообщение для riaron86 Посмотреть профиль Найти все сообщения от riaron86
 
Регистрация: 27.11.2021
Сообщений: 41

выдает ошибку
(in promise) SyntaxError: Unexpected token '<', "<html>
<"... is not valid JSON
Promise.then (асинхронно)
(анонимный) @ App.js:9
commitHookEffectListMount @ react-dom.development.js:23150
commitPassiveMountOnFiber @ react-dom.development.js:24926
commitPassiveMountEffects_complete @ react-dom.development.js:24891
commitPassiveMountEffects_begin @ react-dom.development.js:24878
commitPassiveMountEffects @ react-dom.development.js:24866
flushPassiveEffectsImpl @ react-dom.development.js:27039
flushPassiveEffects @ react-dom.development.js:26984
(анонимный) @ react-dom.development.js:26769
workLoop @ scheduler.development.js:266
flushWork @ scheduler.development.js:239
performWorkUntilDeadline @ scheduler.development.js:533
index.js//сервер
const express = require("express");

const PORT = process.env.PORT || 3001;

const app = express();
app.get("/api", (req, res) => {
    res.set('Access-Control-Allow-Origin', 'http://localhost:3000/');

    res.json({ message: "Hello from server!" });
});


app.listen(PORT, () => {
    console.log(`Server listening on ${PORT}`);
});

index.js//клиент
import React,{createContext, useContext} from 'react';
import ReactDOM from 'react-dom/client';
import App from './App.js';
const Context = createContext(null)
const arrayse=[
    {'id':1,'description':'description1'},
    {'id':2,'description':'description2'},
    {'id':3,'description':'description3'},
    {'id':4,'description':'description4'},
    {'id':5,'description':'description5'},
]

const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(<Context.Provider value={{arrayse:arrayse}}>
        <App arrayse={arrayse}/>
    </Context.Provider>
);

app.js

import React from "react";
import Shop from "./pages/Shop";

// client/src/App.js
function App({arrayse}) {
    const [data, setData] = React.useState(null);

    React.useEffect(() => {
        fetch('http://localhost:3000/api')
            .then((res) => res.json())
            .then((data) => setData(data.message));
    }, []);
    return (
        <div className="App">
            <header className="App-header">
                <p>{!data ? "Loading..." : data}</p>
            </header>

        <Shop arrayse={arrayse}/>
        </div>
    )
}

export default App;
Ответить с цитированием
  #13 (permalink)  
Старый 23.05.2023, 15:05
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,493

->
fetch('http://localhost:3001/api')
__________________
29375, 35
Ответить с цитированием
  #14 (permalink)  
Старый 23.05.2023, 22:13
Аспирант
Отправить личное сообщение для riaron86 Посмотреть профиль Найти все сообщения от riaron86
 
Регистрация: 27.11.2021
Сообщений: 41

теперь пишет что не может спарсить, что делать
Failed to execute 'fetch' on 'Window': Failed to parse URL from http://localhost:3001`/api
at App.js:9:1
at commitHookEffectListMount (react-dom.development.js:23150:1)
at commitPassiveMountOnFiber (react-dom.development.js:24926:1)
at commitPassiveMountEffects_complete (react-dom.development.js:24891:1)
at commitPassiveMountEffects_begin (react-dom.development.js:24878:1)
at commitPassiveMountEffects (react-dom.development.js:24866:1)
at flushPassiveEffectsImpl (react-dom.development.js:27039:1)
at flushPassiveEffects (react-dom.development.js:26984:1)
at react-dom.development.js:26769:1
at workLoop (scheduler.development.js:266:1)
(анонимный) @ App.js:9
commitHookEffectListMount @ react-dom.development.js:23150
commitPassiveMountOnFiber @ react-dom.development.js:24926
commitPassiveMountEffects_complete @ react-dom.development.js:24891
commitPassiveMountEffects_begin @ react-dom.development.js:24878
commitPassiveMountEffects @ react-dom.development.js:24866
flushPassiveEffectsImpl @ react-dom.development.js:27039
flushPassiveEffects @ react-dom.development.js:26984
(анонимный) @ react-dom.development.js:26769
workLoop @ scheduler.development.js:266
flushWork @ scheduler.development.js:239
performWorkUntilDeadline @ scheduler.development.js:533
Ответить с цитированием
  #15 (permalink)  
Старый 23.05.2023, 23:14
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,493

riaron86, а прочитать что тебе написало и приглядеться?
__________________
29375, 35
Ответить с цитированием
  #16 (permalink)  
Старый 24.05.2023, 12:08
Аспирант
Отправить личное сообщение для riaron86 Посмотреть профиль Найти все сообщения от riaron86
 
Регистрация: 27.11.2021
Сообщений: 41

Между localhost и /api есть кавычка но в коде её нет
Ответить с цитированием
  #17 (permalink)  
Старый 24.05.2023, 18:25
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,493

riaron86, космические лучи, вестимо.

В коде её не может не быть, смотри внимательно, сделай полнотекстовый поиск...
__________________
29375, 35

Последний раз редактировалось Aetae, 24.05.2023 в 18:28.
Ответить с цитированием
  #18 (permalink)  
Старый 28.05.2023, 13:01
Аспирант
Отправить личное сообщение для riaron86 Посмотреть профиль Найти все сообщения от riaron86
 
Регистрация: 27.11.2021
Сообщений: 41

теперь нет ошибок но значение data undfined

App.js
import React from "react";
import Shop from "./pages/Shop";

// client/src/App.js
function App({arrayse}) {
    const [data, setData] = React.useState(null);

    React.useEffect(() => {
      const res=  fetch('http://localhost:3001/api',{mode: 'no-cors'});

        setData(res.json);
    }, []);
    console.log(data);

    return (
        <div className="App">
            <header className="App-header">
                <p>{!data ? "Loading..." : data}</p>
            </header>
        <Shop arrayse={arrayse}/>
        </div>
    )
}

export default App;

index.php
const express = require("express");
const PORT =  3001;

const app = express();

app.get("/api", (req, res) => {
    res.set('Access-Control-Allow-Origin', 'https://localhost:3001',{mode: 'no-cors'});

    res.json({ message: "Hello from server!" });
});


app.listen(PORT, () => {
    console.log(`Server listening on ${PORT}`);
});
Ответить с цитированием
  #19 (permalink)  
Старый 28.05.2023, 14:06
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,706

fetch - асинхронная функция. Она возвращает промис
res.json - тоже асинхронная.
Я не знаток реакта, но fetch надо вызывать как то так

fetch('http://localhost:3001/api',{mode: 'no-cors'})
   .then( res => res.json())
   .then (data => setData(data) )
Ответить с цитированием
  #20 (permalink)  
Старый 28.05.2023, 15:56
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,493

И {mode: 'no-cors'} убрать. Это не магия которая позволит тебе делать кросдоменные запросы без разрешения. Этот заголовок позволяет отравить кросдоменный запрос, но запрещает получение ответа.

И 'Access-Control-Allow-Origin' должен быть не 'https://localhost:3001'(сервер), а 'https://localhost:3000'(клиент) - url тут означает кому ты разрешаешь, а не кто разрешает(что и так ясно). Ну и проще '*' поставить для разработки и не париться. Всё равно в проде удалять.

voraa, у него в предыдущем посте всё нормально было с вызовом, техно-шаманит видать, буковки переставляя в надежде на чудо.
__________________
29375, 35

Последний раз редактировалось Aetae, 28.05.2023 в 16:02.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
или не умею передавать данные между родителем и дочерним или не знаю useConext riaron86 Другие библиотеки 3 28.12.2022 15:42
Ищу senior full-stack на Node + React в Москве slimerock Работа 1 18.08.2020 18:36
Как правильно отрендерить данные на react с разрывом? s24344 Элементы интерфейса 0 28.01.2019 19:35
Линейный список в js artem55555p Элементы интерфейса 4 29.05.2018 11:15
Не совсем обычный фрейм и выезжающий текст при наводе на картинку. amaz245 Элементы интерфейса 35 25.12.2010 17:29