Ran*_*lue 26 javascript node.js express
我想.html使用Express 3 渲染原始页面,如下所示:
server.get('/', function(req, res) {
res.render('login.html');
}
Run Code Online (Sandbox Code Playgroud)
这就是我如何配置服务器来呈现原始HTML页面(灵感来自这个过时的问题):
server
.set('view options', {layout: false})
.set('views', './../')
.engine('html', function(str, options) {
return function(locals) {
return str;
};
});
Run Code Online (Sandbox Code Playgroud)
不幸的是,使用此配置页面会挂起并且永远不会正确呈现.我做错了什么?如何使用Express 3渲染原始HTLM而不使用Jade和EJS等花哨的渲染引擎?
sha*_*sh7 46
我想你想说的是:我如何提供静态html文件,对吧?
让我们来看看吧.
首先,我自己的项目中的一些代码:
app.configure(function() {
app.use(express.static(__dirname + '/public'));
});
Run Code Online (Sandbox Code Playgroud)
这意味着我的app文件夹中有一个名为public的文件夹.我所有的静态内容,如css,js甚至html页面都在这里.
要实际发送静态html页面,只需将其添加到您的应用程序文件中即可
app.get('/', function(req, res) {
res.sendFile(__dirname + '/public/layout.html');
});
Run Code Online (Sandbox Code Playgroud)
所以如果你有一个名为xyz.com的域名; 每当有人去那里,他们将在他们的浏览器中提供layout.html.
编辑
如果你使用快递4,事情会有所不同.路由和中间件的执行顺序与它们的顺序完全相同.
一种好的技术是将静态文件服务代码放在所有标准路由之后.像这样 :
// All standard routes are above here
app.post('/posts', handler.POST.getPosts);
// Serve static files
app.use(express.static('./public'));
Run Code Online (Sandbox Code Playgroud)
这非常重要,因为它可能会消除代码中的瓶颈.看看这个stackoverflow的答案(他谈到优化的第一个答案)
Express 4.0的另一个主要变化是你不需要使用app.configure()
hun*_*tis 20
如果您实际上不需要将数据注入模板,则express中最简单的解决方案是使用静态文件服务器(express.static()).
但是,如果您仍然希望手动将路线连接到页面(例如,您的示例将'/'映射到'login.html'),您可能会尝试res.sendFile()发送您的html文档:
http://expressjs.com/api.html#res.sendfile
she*_*onk 18
你尝试过使用fs模块吗?
server.get('/', function(req, res) {
fs.readFile('index.html', function(err, page) {
res.writeHead(200, {'Content-Type': 'text/html'});
res.write(page);
res.end();
});
}
Run Code Online (Sandbox Code Playgroud)
正如文档所说:'Express期望:app.engin(...)中的:(路径,选项,回调)'格式函数.
所以你可以像下面那样编写代码(为简单起见,但它可以工作):
server
.set('view options', {layout: false})
.set('views', './../')
.engine('html', function(path, options, cb) {
fs.readFile(path, 'utf-8', cb);
});
Run Code Online (Sandbox Code Playgroud)
当然就像2#和3#所说的那样,你应该使用express.static()进行静态文件传输; 以上代码不适合生产
首先,你所犯的错误是尝试使用express 2.x代码片段在express 3.0中呈现原始HTML.从表达3.0开始,只将文件路径传递给视图引擎而不是文件内容.
来解决方案,
创建一个简单的视图引擎
var fs = require('fs');
function rawHtmlViewEngine(filename, options, callback) {
fs.readFile(filename, 'utf8', function(err, str){
if(err) return callback(err);
/*
* if required, you could write your own
* custom view file processing logic here
*/
callback(null, str);
});
}
Run Code Online (Sandbox Code Playgroud)
像这样使用它
server.engine('html', rawHtmlViewEngine)
server.set('views', './folder');
server.set('view engine', 'html');
Run Code Online (Sandbox Code Playgroud)
参考
官方快递2.x至3.x移民指南
请参阅此网址中的"模板引擎集成"部分 https://github.com/visionmedia/express/wiki/Migrating-from-2.x-to-3.x
| 归档时间: |
|
| 查看次数: |
67581 次 |
| 最近记录: |