web-dev-qa-db-ja.com

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>
26
user3044147

次のようなコードを試してください。

var app = express();
app.get('/test', function(req, res) {
    res.sendFile('views/test.html', {root: __dirname })
});
  1. ファイルを手動で読み取る代わりに res.sendFile を使用して、expressがコンテンツタイプを適切に設定できるようにします。

  2. app.engine行は、エクスプレスによって内部的に処理されるため、必要ありません。

54
Tim Brown

数年後、Express.jsviewエンジンを使用して別のアプローチを追加したい

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の配置を壊す必要はありません。

3
efkan

エクスプレスでページをより簡単にレンダリングできます

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ページをレンダリングすること

1
Adiii