通过http createServer

时间:2018-06-23 21:18:19

标签: javascript node.js

我正在尝试使用Node.JS创建一个基本的Web服务器,但是遇到了无法正确提供图像的问题。

var server = http.createServer(function (request, response){
    if(request.url === '/') {
        fs.readFile('public/index.html', 'utf8', function(errors, contents){
            response.write(contents); 
            response.end();
        });
    } else {
        fs.readFile("public" + request.url, 'utf8', function(errors, contents){
            if (!errors) {
                response.end(contents);
            } else {
                console.log('Failed to read file: /public' + request.url);
                response.writeHead(404);
                response.end();
            }
        });
    }
});

一切正常,除了如果您去查看它尝试下载的图像(我认为它已损坏-无法打开它),这不是我想要的,我希望可以在其中正确地提供图像浏览器(不是通过标签)

要点:我需要能够正确给出正确的标题(我是否需要switch语句并通过它设置它们?),因为chrome会发出警告

Resource interpreted as Stylesheet but transferred with MIME type text/plain: "http://localhost/css.css".

1 个答案:

答案 0 :(得分:2)

您可以使用expressjs:http://expressjs.com/

const express = require('express')
const app = express()

app.get('/', (req, res) => res.sendFile('public/index.html'))
app.use(express.static('public'))

app.listen(8080, () => console.log('Example app listening on port 8080!'))

NB:

您的代码不安全:"public" + request.url。您的用户可以获取服务器中的所有文件:fs.readFileSync("public/../../../README.txt");

您将在父文件夹上收到错误消息。

  

错误:ENOENT:没有此类文件或目录,请打开“ C:\ README.txt”。