当前位置: 首页 > 面试题库 >

NodeJS中的基本静态文件服务器

长孙景焕
2023-03-14
问题内容

我正在尝试在nodejs中创建静态文件服务器,而不是将其作为完美的服务器,这更多是为了理解节点。我非常了解Connect和node-
static之类的项目,并且完全打算将这些库用于更多可用于生产的代码,但我也想了解我正在使用的基础知识。考虑到这一点,我编写了一个小的server.js:

var http = require('http'),
    url = require('url'),
    path = require('path'),
    fs = require('fs');
var mimeTypes = {
    "html": "text/html",
    "jpeg": "image/jpeg",
    "jpg": "image/jpeg",
    "png": "image/png",
    "js": "text/javascript",
    "css": "text/css"};

http.createServer(function(req, res) {
    var uri = url.parse(req.url).pathname;
    var filename = path.join(process.cwd(), uri);
    path.exists(filename, function(exists) {
        if(!exists) {
            console.log("not exists: " + filename);
            res.writeHead(200, {'Content-Type': 'text/plain'});
            res.write('404 Not Found\n');
            res.end();
        }
        var mimeType = mimeTypes[path.extname(filename).split(".")[1]];
        res.writeHead(200, mimeType);

        var fileStream = fs.createReadStream(filename);
        fileStream.pipe(res);

    }); //end path.exists
}).listen(1337);

我的问题是双重的

  1. 这是在节点中创建和流式传输基本html等的“正确”方法,还是有更好/更优雅/更可靠的方法?

  2. 节点中的.pipe()基本上只是执行以下操作吗?

var fileStream = fs.createReadStream(filename);
fileStream.on('data', function (data) {
    res.write(data);
});
fileStream.on('end', function() {
    res.end();
});

感谢大家!


问题答案:
  • 基本服务器看起来不错,除了:

有一个return失踪的语句。

    res.write('404 Not Found\n');
res.end();
return; // <- Don't forget to return here !!

和:

res.writeHead(200, mimeType);

应该:

res.writeHead(200, {'Content-Type':mimeType});

  • 是的pipe(),基本上是这样做的,它还会暂停/恢复源流(以防接收器变慢)。这是该pipe()函数的源代码:https : //github.com/joyent/node/blob/master/lib/stream.js


 类似资料:
  • 我们先来看看最简单的本地静态文件服务配置示例: server { listen 80; server_name www.test.com; charset utf-8; root /data/www.test.com; index index.html index.htm; } 就这些?

  • 我需要跟踪nodejs express提供的所有“静态”文件

  • 我试着设置nginx来服务我的node.js应用程序静态文件。问题是,当我试图得到我的文件时,我的状态是403禁止的。 当我尝试下载一个文件从 /root/appJs/public/css/style.css我写http://sitename.com/css/style.css我retive 403禁忌状态。我已经在一些论坛上寻找解决方案,但没有

  • 问题内容: 我的要求是,我应该通过一个安静的服务将10MB的zip文件发送给客户端。我在论坛中找到了发送对象是更好的方法的代码,但是如何在以下代码中创建对象: 问题答案: 它是下载文件的更好方法和简便方法。 对于您所要求的代码:

  • 本文向大家介绍使用nodejs、Python写的一个简易HTTP静态文件服务器,包括了使用nodejs、Python写的一个简易HTTP静态文件服务器的使用技巧和注意事项,需要的朋友参考一下 日常开发过程中,我们经常需要修改一些放在 CDN 上的静态文件(如 JavaScript、CSS、HTML 文件等),这个过程中,我们希望能有一种方式将线上 CDN 的目录映射为本地硬盘上的某个目录,这样,当

  • 在根目录下新建文件夹叫static。代码可以通过/static/来引入相关的静态资源。 export default () => <img src="/static/my-image.png" alt="my image" /> _注意:不要自定义静态文件夹的名字,只能叫static ,因为只有这个名字 Next.js 才会把它当作静态资源。