• node案例


    1.显示文件夹或子文件及子文件

    const fs=require('fs')
    function readFile(path) {
        let obj={}
        if(fs.statSync(path).isFile()){
            return `{${path}:true}`
        }
        let arr=fs.readdirSync(path)
        arr.forEach((val)=>{    
            let pas=path+"/"+val
            let result = fs.statSync(pas).isFile();
            if(!result){
                obj[val]=readFile(pas)
            }else{
                obj[val]=true
            }
        })    
        return obj
    }
    path=''
    fs.writeFileSync('./data.json',JSON.stringify(readFile(path)));
    console.log(readFile(path))

    2.利用http模块 开启服务器

    let http=require('http')
    let server=http.createServer()
    let url=require('url')
    let fs=require('fs')
    const https = require('https');
    server.on('request',(req,res)=>{
        const urlStr=req.url
        //匹配相应的路径 写入对应的文件
        if(urlStr== '/'){
            let data = fs.readFileSync('./index.html');
            res.write(data);
            res.end();
        }
        //匹配相应的路径 发送请求 响应的数据 写入到相应的地方
        if(url.parse(urlStr).pathname == '/v2/music/search'){
            //向豆瓣的后台发送请求
            https.request({
                hostname: 'api.douban.com',
                port: 443,
                path: urlStr
            }, (re)=>{
                //请求成功
                let value = '';
                //监听接收数据
                re.on('data', (bf)=>{
                    value += bf;
                }),
                //监听数据接收完成
                re.on('end', ()=>{
                    //得到所有数据,响应客户端
                    // res.write(value)
                    fs.writeFileSync('./data.json', value);
                    res.end();
                })
            }).end();
          }
    })
    //启动服务器
    server.listen(1314,(error)=>{
        if(error){
            console.log('服务器启动失败')
        }else{
            console.log('服务器启动成功')
        }
    })

    3.利用express第三方模块开启服务器

     

    
    
    //proxy模块
    let https=require('https')
    module.exports=proxy=(name,path)=>{
        console.log(`[HPM] Proxy created: /  ->  https://${name}`)
        return (req,res)=>{
            url=req.url
            https.request({
                hostname: name,
                port: 443,
                path:path+url
            },(re)=>{
                let value='';
                re.on('data',(bf)=>{
                    value+=bf
                })
                re.on('end',()=>{
                    res.json(JSON.parse(value));
                })
            }).end()
        }
    }
    
    

    const
    fs=require('fs') //自定义模块 const proxy=require('./proxy')
    //以下均为第三方模块 const express=require('express') const proxys=require('http-proxy-middleware') const server=express() server.get('/',(req,res)=>{ const result2=fs.readFileSync('./index.html') res.end(result2) })
    //自定义模块 server.use(
    '/v2',proxy('api.douban.com','/v2'))
    //第三方模块引入的方法 server.use(
    '/v4', proxys({target: 'https://m.maizuo.com', changeOrigin: true})); //开启服务器 server.listen(1314,(error)=>{ if(error){ console.log('服务器启动失败') }else{ console.log('服务器启动成功') } })

    3.设置模板引擎

    const express=require('express')
    const server=express()
    const swig=require('swig')
    // 设置模板引擎 为html
    server.set('view engine','html')
    // 设置模板放置的位置
    server.set('views', './www');
    //设置该模板引用的模块
    server.engine('html', swig.renderFile);
    //使得引用模板后不缓存
    swig.setDefaults({cache: false});
    server.get('/',(req,res)=>{
        // 通过该callback函数返回视图的呈现HTML
        // 参数一:呈现在哪个页面
        // 参数二:呈现在页面中的变量 在html利用{{}}可以直接写入变量
        // 参数三:回调
        const d=new Date().getHours()
        // 当前路径+那个页面
        res.render('home', {
            nav: [
                    '今日特价',
                    '优选商品'
                ],
            number:{
                a:1,
                b:3,
                c:4
            },
            day:d>5&&d<6?true:false
    
        })
    })
    server.listen(1314,(error)=>{
        if(error){
            console.log('服务器启动失败')
        }else{
            console.log('服务器启动成功')
        }
    })

    4.开启路由

    通过路由,可以在返回页面之前,先通过中间件执行若干事物,将这些事物放在中间件里面,形成一种模块。增强代码的可读性

    const router = new express.Router();

    5.mongodb数据库+服务器

    const express=require('express')
    const swig=require('swig')
    const mongoose=require('mongoose')
    
    
    new Promise((resolve,reject)=>{
        // 连接数据库
        mongoose.connect('mongodb://localhost:1314',(error)=>{
            if(error){
                console.log('连接数据库失败');
                console.log(error);
            }else{
                console.log('连接数据库成功'); 
                resolve(); 
            }
        })
    }).then(()=>{
        // 开启服务器
        server=express()
    
        // 处理静态资源文件
        server.use('/static', express.static('./www'));
        //处理html文件
        // 利用模板引擎
        server.set('view engine', 'html');
        server.set('views', './www/html');
        server.engine('html', swig.renderFile);
        swig.setDefaults({cache: false});
    
        // 引入html路由配置
        moduleHtml=require('./router/moduleHtml')
        server.use('/',moduleHtml)
    
        //处理ajax文件
        moduleAjax=require('./router/moduleAjax')
        server.use('/api',moduleAjax)
    
        // 指定服务器配置
        server.listen(1314,(error)=>{
            if(error){
                console.log('服务器启动失败');
            }else{
                console.log('服务器启动成功');
            }
        })
    })
  • 相关阅读:
    关于linux内核模块Makefile的解析
    The Kernel Newbie Corner: Kernel Debugging with proc "Sequence" Files--Part 3
    The Kernel Newbie Corner: Kernel Debugging with proc "Sequence" Files--Part 2
    The Kernel Newbie Corner: Kernel Debugging Using proc "Sequence" Files--Part 1
    __KERNEL__ macro
    代码片段------find批量处理
    poll机制分析
    initrd映像文档的作用和制作
    为什么文件名要小写?
    CSS媒体查询 width VS device-width
  • 原文地址:https://www.cnblogs.com/lianqing/p/9226066.html
Copyright © 2020-2023  润新知