2017-03-02 16 views
0

我對此很新。我創建了一個本地運行的節點快速服務器。我在public\html文件夾下有一個index.html。當我訪問該索引頁面時,出現錯誤Can't render headers after they are sent to the client node server error。我的理解是,如果URL是localhost:8080 plus /,index.html會被渲染?我該如何解決這個問題?非常感謝!節點Express服務器錯誤:發送到客戶端後無法呈現標頭

ps:奇怪的是,當我將index.html從「public」文件夾移出到與節點server.js相同的目錄,並更改爲app.get('/', function (req, res {fs.readFile('/index.html'.. index.html似乎工作正常。

var fs = require('fs'); 
var http = require('http'); 
var https = require('https'); 
var request = require('request'); 
var XMLHttpRequest = require("xmlhttprequest").XMLHttpRequest; 
var path = require('path'); 
var express = require('express'); 
var app = express(); 
var certificate = fs.readFileSync('something.0.0.1.cert'); 
var privateKey = fs.readFileSync('something.0.0.1.key'); 

process.env.NODE_TLS_REJECT_UNAUTHORIZED = "0"; 
app.use(express.static(__dirname+'/public')); 
app.get('/', function (req, res) { 
    fs.readFile('__dirname + '/public'+ '/html'+/index.html', function(error, content) { 
    if (error) { 
     res.writeHead(500); 
     res.end(); 
    } 
    else { 
     res.writeHead(200, { 'Content-Type': 'text/html' }); 
     res.end(content, 'utf-8'); 
    } 
}); 
    res.send('Hello World'); 
}); 

https.createServer({ 
    key: privateKey, 
    cert: certificate 
}, app).listen(8080,'0.0.0.0'); 

回答

1

對於每個請求,您只會得到一個響應。你的代碼顯示res.send('Hello World');

更改爲res.sendFile("__dirname + '/public/html/' + 'index.html' ")

可以刪除fs.readFile太行。

當您移動到與您的服務器相同的文件時,fs.readFile('/ index.html')工作的原因是因爲該行意味着從同一目錄中讀取名爲index.html的文件。但是你想發送一個請求的響應,而不僅僅是讀取文件。

檢查出來的文檔上res.sendFile快遞

試試這個:

app.get('/', function (req, res) { 
 
     res.sendFile(__dirname + '/public/html/'+'index.html'); 
 
    });

+0

你的意思是刪除整個行'fs.readFile('__目錄名稱+ '/公衆' + '/html'+/index.html',function(error,content)'?如何告訴它讀取index.html而不是其他的.html文件? – user4046073

+0

更新了我的答案, – Turnipdabeets

相關問題