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 })
});
Используйте res.sendFile вместо чтения файла вручную, чтобы Express мог правильно настроить тип содержимого для вас.
Вам не нужно
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')
})