Как сделать HTML файл из express при использовании Ract в качестве внешнего интерфейса? - PullRequest
0 голосов
/ 25 марта 2020

Я новичок в мире веб-разработки, и у меня есть проблема, которая кажется глупой, но она отнимает у меня много времени.

Я создал express сервер, который запускает React во внешнем интерфейсе. Я запускаю оба (процессор и express сервер), анализируя мое приложение реакции с веб-пакетом и пакетом, а затем загружаю выходные файлы с помощью express stati c, используя publi c dir.

Вот так я могу отрендерить html do c по пути root ('/'). Проблема начинается, когда я пытаюсь использовать реакции-маршрутизатор с express маршрутизатором. Я пытался решить эту проблему и обнаружил, что мне нужно только установить маршрут express, который выглядит следующим образом:

/*This is my actual code in the project*/

router.get('/*', (req, res, next) =>{
res.sendFile(require('../public/index.html'))
})

Этот код будет работать реагировать, потому что я вызываю его из тег script внутри html, и React будет обрабатывать URL-адрес и отображать его собственные компоненты.

Но когда я пытаюсь найти любой путь в браузере, я получаю самую простую ошибку, SynthaxError:

C:\Users\Matthew\Desktop\Proyectos\Apid0\src\public\index.html:1
<!DOCTYPE html>
^

SyntaxError: Unexpected token '<'
at wrapSafe (internal/modules/cjs/loader.js:1067:16)
at Module._compile (internal/modules/cjs/loader.js:1115:27)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1171:10)
at Module.load (internal/modules/cjs/loader.js:1000:32)
at Function.Module._load (internal/modules/cjs/loader.js:899:14)
at Module.require (internal/modules/cjs/loader.js:1040:19)
at require (internal/modules/cjs/helpers.js:72:18)
at C:\Users\Matthew\Desktop\Proyectos\Apid0\src\routes\index.js:5:18
at Layer.handle [as handle_request] 
(C:\Users\Matthew\Desktop\Proyectos\Apid0\node_modules\express\lib\router\layer.js:95:5)
at next (C:\Users\Matthew\Desktop\Proyectos\Apid0\node_modules\express\lib\router\route.js:137:13)

Может ли кто-нибудь помочь мне решить эту проблему?

Ответы [ 2 ]

1 голос
/ 25 марта 2020

Я исправил проблему с этим:

router.get('/*', (req, res, next) =>{
res.sendFile('index.html', { root: path.join(__dirname, '../public') });
})
0 голосов
/ 25 марта 2020

Во-первых, вы должны прочитать содержимое файла в виде строки (не обязательно).

Что-то вроде:

router.get('/*', (req, res, next) =>{
  fs.readFile("../public/index.html", "utf8", function(err, data) {
    if (err) throw err;
    res.sendFile(data)
  })
})
...