Отправить HTML-страницу клиенту

#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 и обслуживании статики здесь