Node Express服务器错误:在将标头发送到客户端后无法呈现标头

时间:2017-03-02 03:50:14

标签: javascript html node.js express server

我对此很新。我创建了一个本地运行的节点快速服务器。我在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');

1 个答案:

答案 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'); 
    });