nodejs将html文件发送给客户端

时间:2013-12-03 08:13:35

标签: node.js express html-rendering

我使用此函数将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>

4 个答案:

答案 0 :(得分:52)

尝试使用以下代码:

var app = express();
app.get('/test', function(req, res) {
    res.sendFile('views/test.html', {root: __dirname })
});
  1. 使用res.sendFile而不是手动阅读文件,因此express可以为您正确设置内容类型。

  2. 您不需要app.engine行,因为快递是由内部处理的。

答案 1 :(得分:3)

多年后,我想在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方法(我用EJS格式编写),请在res.render中执行此操作:

<%- locals.html %>

就是这样。

通过这种方式,您无需中断View Engine的安排。

答案 2 :(得分:0)

  

您可以更轻松地在快递中呈现页面

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页面

答案 3 :(得分:0)

“../”被认为是恶意的,会导致 ForbiddenError: Forbidden at SendStream.error... 异常。

要走的路是使用路径模块:

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