#node.js #express
#node.js #экспресс
Вопрос:
Я формирую разметку html-страницы и записываю в переменную htmlToSend
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Hyperspotters</title>
</head>
<body style="margin: 0;
font-family: Arial, Helvetica, sans-serif;">
<header>
<div style="background: #3366CD; padding: 10px">
....
Мне нужно вернуть ее клиенту.
Я продвигал так
let htmlToSend = func.statusСheck(success, replacements);
return res.sendFile(htmlToSend);
и
let htmlToSend = func.statusСheck(success, replacements);
return res.render(htmlToSend);
Как мне вернуть клиенту мою разметку?
Ответ №1:
Обычно функции промежуточного программного обеспечения Express.js
предоставляют req
доступ к res
и res
объектам, при этом в качестве,, объекта является объект response, который используется для отправки ответов обратно клиенту.
Пример:
app.use(function (req, res, next) {
});
Как уже было указано @jacob, используйте send
функцию объекта response для отправки ответа клиенту. Однако вам следует отправлять данные в виде строки (не буфера), потому что использование буфера приводит к интерпретации данных как двоичных данных, но очевидно, что вы отправляете текст. Кроме того, использование буфера заставляет express устанавливать тип содержимого ‘application / octet-stream’, что также не то, что вы хотите. Вместо этого установите для нее значение «текст / html».
app.use("/", function (req, res, next) {
res.set('Content-Type', 'text/html');
res.send(htmlToSend);
});
Смотрите: http://expressjs.com/en/guide/routing.html
А также: https://expressjs.com/en/4x/api.html#res.send
Ответ №2:
Не ясно, чего именно вы пытаетесь достичь.
Если вы хотите отобразить HTML, попробуйте этот код.
res.render('index', function(err, html) {
res.send(html);
});
где index
находится представление
Если вы хотите ответить содержимым HTML, попробуйте этот код.
res.set('Content-Type', 'text/html');
res.send(new Buffer(htmlToSend));
не забудьте установить Content-Type
.
Комментарии:
1. Я пробовал оба метода и выдает ошибку
path must be absolute or specify root to res.sendFile
2. вы можете попробовать
res.sendFile(__dirname htmlToSend);
. помните, что в этом случаеhtmlToSend
должен быть файл, а не содержимое HTML.
Ответ №3:
Вы можете добиться этого одним из следующих способов:
// serve your files as static
// 'public' -- your static files folder, set path accordingly
app.use('/static', express.static(__dirname 'public'))
Предполагая, что у вас есть index.html
в вашей public
папке, вы можете получить доступ к файлу, подобному yourhost:port/static/index.html
Или используйте шаблонизатор через view engine
(например ejs
, ‘pug’, nunjucks
и т.д.), Например:
// assuming you use ejs
const ejs = require('ejs'); // install ejs package
// your views folder (say folder named "views")
app.set('views', __dirname 'views')
app.set('view engine', 'ejs')
// Assuming you've index.ejs in your views folder
// in your router
...
res.render('index');
Подробнее о templating
engines
и обслуживании статики здесь