zoukankan      html  css  js  c++  java
  • Node学习8-handlebars模板

    npm install handlebars

    像apk这种文件,虽然返回值是text/plain,但是直接就下载了,真智能。

            //把访问的绝对路径拼出来
            //如果别人想看根目录之前的呢?手动输入..也会变成/,我也不知道为什么
            console.log(req.url);
            var filePath = path.join(process.cwd(),req.url);
            console.log('绝对路径'+filePath);
            //查看访问的这个路径的信息
            //如果访问127.0.0.1:3000的话,其实就是访问的当前根目录,因为url是空or
            fs.stat(filePath,(err,stats)=>{
    
                if(err){
                    res.statusCode=404;
                    res.setHeader('Content-Type','text/plain');
                    res.end(filePath+'is not exsit!');
                    //结束这个函数
                    return;
                }
    
                //如果是文件,显示内容
                if(stats.isFile()){
                    res.statusCode=200;
                    const ext = type(path.extname(filePath));
                    console.log(ext);
                    res.setHeader('Content-Type',ext);
                    res.setHeader('charset','utf-8');
                    //当然用readFile也可以,但是对于浏览器来说,流的方式是最快的
                    //比如apk等文件,流要比readFile快很多很多很多
                    fs.createReadStream(filePath).pipe(res);
    
                    
                    // fs.readFile(filePath,(err,data)=>{
                    //     //console.log(data.toString());
                    //     res.end(data.toString());
                    // });
    
                    
                    
                }else if(stats.isDirectory()){
                    //如果是目录,返回文件列表
                    fs.readdir(filePath,(err,files)=>{
    
                        res.statusCode=200;
                        res.setHeader('Content-Type','text/html');
                        // //files是string[],join是用,分割并返回字符串
                        // res.end(files.join(','));
                        const data = {
                            title:path.basename(filePath),
                            //当前路径名
                            //process.cwd()不行,因为这是node app.js运行的路径,就是说永远是src,请求永远是src/xxx.js肯定不对
                            //中途的文件夹都被删掉了
                            //因为当前就是一个文件夹啊....所以返回自己就可以了
                            //绝对路径D:南京实验室相关FileServersrcD:\%E5%8D%97%E4%BA%AC%E5%AE%9E%E9%AA%8C%E5%AE%A4%E7%9B%B8%E5%85%B3FileServersrcconfigserverConfig.js
                            //filePath,直接这样也不行,因为是通过root+url拼起来的,url变成绝对路径,就会像上面一样重叠了
                            //直接用的上面的files
                            filePath,
                            //返回与src之间的相对路径
                            dir:path.relative(process.cwd(),filePath),
                            files
                        };
                        res.end(dirTemplate(data));
    
                    });
                }
    
    
    
            });
    const type = {
    
        'js':'text/javascript',
        'ico':'image/x-icon',
        'txt':'text/plain',
        'jpg':'image/jpeg'
    
    }
    
    module.exports = (file)=>{
    
        //最后一个
        let ext = file.split('.').pop();
    
        return type[ext] || type['txt'];
    
    }

    dir.html

    <html>
    
    <head>
        <meta charset="utf-8">
        <title>{{title}}</title>
    </head>
    
    <body>
        <p>{{filePath}}</p>
    
        <!-- each作用域里面只会找files里面的元素,查不到外部元素比如filePath -->
        <!-- 必须改成../dir,我还以为是路径问题呢。。。真的混淆 -->
        {{#each files}}
            <a href="{{../dir}}/{{this}}">{{this}}</a>
            <br>
        {{/each}}
    </body>
    
    </html>
  • 相关阅读:
    有序数组(类模板)
    BUUCTF-Web Comment
    BUUCTF-web NiZhuanSiWei
    2020数字中国创新大赛虎符网络安全赛道-pwn count
    BUUCTF-Web Easy Calc
    xctf-web fakebook
    xctf-web supersqli
    xctf-pwn pwn200
    xctf-pwn level3
    利用updatexml()报错注入mysql
  • 原文地址:https://www.cnblogs.com/weizhibin1996/p/9296478.html
Copyright © 2011-2022 走看看