nodejs отправляет HTML-файл клиенту

Я использую эту функцию для отправки html-файла клиенту, но в клиенте я ничего не получаю (пустая страница) без ошибок. Что-то я не так? Пожалуйста, помогите?

var express = require('express'); 
var fs = require('fs');
var app = express();
app.set('view engine', 'jade');
app.engine('jade', require('jade').__express); 
    app.get('/test', function(req, res) {
            fs.readFile(__dirname + '/views/test.html', 'utf8', function(err, text){
                res.send(text);
            });
var port = process.env.PORT || 80;
var server = app.listen(port);
console.log('Express app started on port ' + port);

Мой файл test.html

<!DOCTYPE html>
<html>
   <head>
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
      <style something here </style>
      <title>Test</title>
      <script src="..."></script>
   </head>
<body>
    <div> Somthing here </div>

    <script type="text/javascript">
        //something here
    </script>
</body></html>

8 ответов

Решение

Попробуйте свой код следующим образом:

var app = express();
app.get('/test', function(req, res) {
    res.sendFile('views/test.html', {root: __dirname })
});
  1. Используйте res.sendFile вместо чтения файла вручную, чтобы Express мог правильно настроить тип содержимого для вас.

  2. Вам не нужно app.engine line, так как это обрабатывается внутри Express.

Вы можете рендерить страницу в экспресс легче

var app   = require('express')();        //to install express write "npm install express"

app.get('/signup',function(req,res){

 res.sendFile(path.join(__dirname+'/signup.html'));

});

так что если вы запросите, как http://127.0.0.1:8080/signup что он будет отображать страницу signup.html

Спустя годы я хочу добавить еще один подход, используя механизм просмотра в Express.js

var fs = require('fs');

app.get('/test', function(req, res, next) {
    var html = fs.readFileSync('./html/test.html', 'utf8')
    res.render('test', { html: html })
    // or res.send(html)
})

Затем сделайте это в своем views/test если вы выберете res.render метод в приведенном выше коде (я пишу в формате EJS):

<%- locals.html %>

Это все.

Таким образом, вам не нужно нарушать договоренности View Engine.

Когда к серверу поступает запрос, обслуживается файл index.html.

      const express = require('express');
const path = require('path');

const app = express();
const port = process.env.PORT || 8080;

// sendFile will go here
app.get('/', function(req, res) {
  res.sendFile(path.join(__dirname, '/index.html'));
});

app.listen(port);
console.log('Server started at http://localhost:' + port);
      var app = express();

app.get('/test', function(req, res) {
  res.sendFile(__dirname + "/view/test.html")
});

Здесь дает вам текущий путь, где ваши файлы сохранены. Итак, вres.sendFile(), мы сначала сообщаем наше текущее местоположение с помощью__dirname+ (затем мы находим конкретный файл, который должен отображаться на главной странице, т.е. e)"vies/test.html".

"../" считается вредоносным и приведет к ForbiddenError: Forbidden at SendStream.error... исключение.

Лучше всего использовать модуль пути :

      var path = require('path');
res.sendFile(path.resolve('views/auth/success.html'));

Следуйте этому простому процессу и отправьте html-файл -> res.sendfile("views/home.html"); // не используйте последнюю букву F с sendFile, вы должны использовать маленькую букву f пример: sendfile();

      In Controllers -> use this in get all routes in index.js

To render html
const router = require('express').Router()
const path = require('path')`enter code here`


router.get('/',(req,res)=>{
  res.sendFile(path.join(__dirname,'/../views/test.html'))
})








To render EJS:
In server.js
const express = require('express');
const bodyParser = require('body-parser');

app.use(bodyParser.urlencoded({ extended: true }));
app.use(express.static('public'))
app.use(bodyParser.json()) 
app.set('view engine','ejs')


In Controller- index.js
const express = require('express')
const app = express()
const router = require('express').Router();
const path = require('path')


router.get('/',(req,res)=>{
res.render('test')
})
Другие вопросы по тегам