我只是用node.js上的EJS,Express.js制作了一个小型模板系统,但是渲染有点wtf ...
这是我server.js的代码:
var fs = require('fs');
var http = require('http');
var https = require('https');
//var privateKey = fs.readFileSync('sslcert/server.key', 'utf8');
//var certificate = fs.readFileSync('sslcert/server.crt', 'utf8');
//var credentials = {key: privateKey, cert: certificate};
var express = require('express');
var app = express();
app.set('view engine', 'ejs');
//Here the config of page
app.get('/', function(req, res){
//Accueil -> redirection vers un chat aléatoire
res.setHeader('Content-Type', 'text/plain');
res.status(500).send('Test !');
});
app.get('/about', function(req, res){
res.setHeader('Content-Type', 'text/plain');
res.status(500).send('Test !');
});
app.get('/auth/login', function(req,res){
res.setHeader('Content-Type', 'text/plain');
res.status(500).send('Test !');
});
app.get('/auth/register', function(req,res){
res.setHeader('Content-Type', 'text/plain');
res.status(500).send('Test !');
});
app.get('/chat', function(req,res){
res.setHeader('Content-Type', 'text/plain');
res.render('redirect.ejs', {});
})
app.get('/chat/:chatnum', function(req,res){
if(parseInt(req.params.chatnum, 10) < 101){
res.setHeader('Content-Type', 'text/plain');
res.status(500).send('Test !' + req.params.chatnum);
}
else {
res.setHeader('Content-Type', 'text/plain');
res.status(404).send('Page introuvable !!');
}
});
app.use(function(req, res, next){
res.setHeader('Content-Type', 'text/plain');
res.status(404).send('Page introuvable !');
});
var httpServer = http.createServer(app);
//var httpsServer = https.createServer(credentials, app);
httpServer.listen(8080);
//httpsServer.listen(8443);
(我目前已禁用https)
所以如果有人知道为什么它不将html呈现为html而是呈现为文本...
预先感谢...
编辑:PS您可以在浏览器中看到模板代码,就像在文件redirecting.ejs中一样 编辑2:为redirect.ejs添加代码格式
<!DOCTYPE html>
<html>
<head>
<title>Redirecting...</title>
</head>
<body>
<h1 style="text-align: center">Redirecting...</h1>
<script>window.location.href = "/ + " (Math.random().trunc() * 100) + 1</script>
</body>
</html>
答案 0 :(得分:3)
标头内容类型不应为“文本/纯文本”。您可以为所有需要发送html的路由删除readme.md
行。
请注意,响应已缓存,并且如果内容没有更改,但是标头更改了,您将看不到更改。
您可以使用res.setHeader('Content-Type', 'text/plain');
来强制重新加载页面。
答案 1 :(得分:2)
从应该返回HTML的任何响应中删除res.setHeader('Content-Type', 'text/plain');
行。
这样,浏览器将知道呈现它,而不是显示原始文本。