我对此很新。我创建了一个本地运行的节点快速服务器。我在index.html
文件夹下有一个public\html
。当我访问该索引页面时,出现错误Can't render headers after they are sent to the client node server error
。我的理解是,如果网址是localhost:8080加/
,那么index.html会被渲染吗?我该如何解决这个问题?非常感谢!
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');
答案 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');
});