Nodejs使用httpdispatcher提供静态镜像

Nodejs serve static image with httpdispatcher

本文关键字:静态 镜像 使用 httpdispatcher Nodejs      更新时间:2023-09-26

我正在使用httpdispatcher,并希望提供静态图像。我在应用程序文件夹中有一个/resources文件夹。并具有以下代码。我试过了http://localhost:3000/resources/abc.jpg想要获得图片,但没有得到任何回应。知道吗?

var http = require('http');
var dispatcher = require('httpdispatcher');
var express = require('express');
var app = express();
 dispatcher.setStatic('resources');
 dispatcher.setStaticDirname('.');
const PORT=3000; 
function handleRequest(request, response){
      try {
        console.log(request.url);
        dispatcher.dispatch(request, response);
    } catch(err) {
        console.log(err);
    }
}

dispatcher.onGet("/page1", function(req, res) {
    res.writeHead(200, {'Content-Type': 'text/plain'});
    var response={"res":'Page One id: ' + req.params.id};
    res.end(JSON.stringify(response));
});    

dispatcher.onPost("/post1", function(req, res) {
    res.writeHead(200, {'Content-Type': 'text/plain'});
    var response={"res":'Got Post Data appId: '+JSON.parse(req.body).appId};
   res.end(JSON.stringify(response));
});
    dispatcher.onError(function(req, res) {
        res.writeHead(404);
        res.end("NOT FOUND");
    });

var server = http.createServer(handleRequest);

server.listen(PORT, function(){
    console.log("Server listening on: http://localhost:%s", PORT);
});

为了将我的评论转化为答案,httpdispatcher当前的静态资产实现由于以下几个原因而中断。

  1. 路径分析不正确。(.处理不当,代码中的连接不好)偏离行:var filename = "." + require('path').join(this.staticDirname, url.pathname);

  2. 不会从它检查的路径名中排除指定的资源url。因此,即使指定.作为静态目录,但指定resources作为URL处理程序,静态目录结构也必须包括一个资源文件夹,或者URL必须包括..,这似乎是目录遍历攻击的成熟途径。

对于您的用例,可能有更好的包目前可以工作,

,但值得向模块作者报告这些缺陷Edit:路径遍历漏洞和目录解析似乎已经存在问题。

目前,您可以通过HTTPServer处理程序中的匹配手动处理路由,也可以使用不同的库。举几个例子,Express,Diet with Diet static,etc.

编辑:如本期所述,截至1.1.0,这些问题似乎已得到解决。