#javascript #node.js
#javascript #node.js
Вопрос:
В моем node.js приложение Я возвращаю некоторый HTML-код из запроса. Я использую express, поэтому я использую оператор require(), чтобы получить его в переменной и вернуть его с запросом. Все это работало нормально, пока внезапно не перестало работать, и я сознательно ничего не менял.
Ошибка
<!DOCTYPE html>
^
SyntaxError: Unexpected token '<'
at wrapSafe (internal/modules/cjs/loader.js:979:16)
at Module._compile (internal/modules/cjs/loader.js:1027:27)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)
at Module.load (internal/modules/cjs/loader.js:928:32)
at Function.Module._load (internal/modules/cjs/loader.js:769:14)
at Module.require (internal/modules/cjs/loader.js:952:19)
at require (internal/modules/cjs/helpers.js:88:18)
at Object.<anonymous> (path/controllers/homepage.js)
at Module._compile (internal/modules/cjs/loader.js:1063:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1092:10)
at Module.load (internal/modules/cjs/loader.js:928:32)
at Function.Module._load (internal/modules/cjs/loader.js:769:14)
at Module.require (internal/modules/cjs/loader.js:952:19)
at require (internal/modules/cjs/helpers.js:88:18)
at Object.<anonymous> (path/routes/home.js)
at Module._compile (internal/modules/cjs/loader.js:1063:30)
Я выделил код-виновник в первой строке следующего:
const page = require("../Front End/Index.html");
exports.getHome = (req, res) => {
res.sendFile(page);
}
Другие вопросы по переполнению стека указывают на то, что HTML-файл является проблематичным, поэтому ниже приведен сегмент (также на который указывает ошибка)
<!DOCTYPE html>
<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta charset="utf-8" />
<link rel="stylesheet" href="Index.css">
<title>Wildfire</title>
<link rel="icon" href="Assets/wildfirelogo64.png">
</head>
Что я делаю не так?
Комментарии:
Ответ №1:
require()
может использоваться для загрузки и запуска файлов Javascript или для чтения и анализа файлов JSON. Он не предназначен для загрузки обычных текстовых файлов. Вы получаете ошибку о <
символе, потому что он пытается проанализировать ваш HTML как Javascript, и, очевидно, это просто выдает синтаксическую ошибку Javascript.
Если вы хотите предварительно загрузить фрагмент HTML, вы можете использовать fs.readFileSync()
:
const fs = require('fs');
const page = fs.readFileSync('../Front End/Index.html');
exports.getHome = (req, res) => {
res.send(page);
}
Или вы можете просто позволить Express обрабатывать чтение файла за вас:
exports.getHome = (req, res) => {
res.sendFile("../Front End/Index.html", { root: __dirname });
}
Комментарии:
1. Когда я выполняю первый вариант, я получаю сообщение об ошибке «TypeError: путь должен быть строкой к res.sendFile», а когда я выполняю второй вариант, я получаю сообщение об ошибке «TypeError: путь должен быть абсолютным или указывать root для res.sendFile». Есть ли способ, которым я могу отправить файл без абсолютного пути или используя первый вариант?
2. @skelegorg — Мой первый вариант не содержит
res.sendFile()
. Если вы имеете в виду второй вариант в моем ответе, то посмотрите Пересмотр моего ответа и настройтеroot
параметр по мере необходимости для вашей структуры каталогов.
Ответ №2:
Вы не можете require
использовать html-файл, синтаксис HTML не может выполняться как синтаксис JS.
Если вы хотите отправить HTML-файл клиенту с помощью экспресс-приложения, просто следуйте какому-нибудь простому примеру в Интернете:
exports.getHome = (req, res) => {
res.sendFile("../Front End/Index.html"); // send it
}