改进服务器

非原创

本文转自https://github.com/a415432669/-front_end_notebook/tree/master/Node/day6/%E6%96%87%E6%A1%A3

 

目标:

let app = new lcApp();
app.on('/', (req, res) => {
    res.end("这是首页");
})
app.on('/dlam', (req, res) => {
    res.end("dlam");
})
app.run(80, () => {
    console.log("成功运行");
})

当前:

let server = http.createServer();

server.on('request', function (req, res) {


    // 根据路径信息,显示不同的页面内容
    if (req.url == "/") {
        res.setHeader('Content-Type', 'text/html; charset=UTF-8');
        res.end('首页');
    } else if (req.url == "/dlam") {
        res.setHeader('Content-Type', getContentType(urlObj.ext));
        let rs = fs.createReadStream('./static/' + url.base)
        res.pipe(res);
    } else {
        res.setHeader('Content-Type', 'text/html; charset=UTF-8');
        res.end('服务器请求失败');
    }
})

server.listen(80)

封装:

       1.构造函数能够实例化app对象

       2.app.on,可以添加路由事件,根据请求的路径,去执行不同的内容

       3.app.run(port,callback),让服务器运行起来

 

静态渲染

LcApp.js

let http = require('http');
let path = require('path');
let url = require('url');
let fs = require('fs');

class LcApp {
    constructor() {
        this.server = http.createServer();
        this.reqEvent = {};
        this.staticDir = 'static';
        this.server.on('request', (req, res) => {
            // 解析路径
            let pathObj = path.parse(req.url);
            console.log(pathObj);
            if (pathObj.dir in this.reqEvent) {
                req.pathObj = pathObj;
                this.reqEvent[pathObj.dir](req, res);
            } else if (pathObj.dir == this.staticDir) {
                res.setHeader("content-type", this.getContentType(pathObj.ext))
                //从服务器磁盘中读取文件,并输出到响应对象中
                let rs = fs.createReadStream('./static/' + pathObj.base)
                rs.pipe(res)
            } else {
                res.setHeader("Content-type", "text/html;charset=utf-8");
                res.end("<h1>404!找不到页面</h1>")
            }
        })
    }
    on(url, fn) {
        this.reqEvent[url] = fn;
    }
    run(port, callback) {
        this.server.listen(port, callback)
    }
    getContentType(extName) {
        switch (extName) {
            case ".jpg":
                return "image/jpeg";
            case ".html":
                return "text/html;charset=utf-8";
            case ".js":
                return "text/javascript;charset=utf-8";
            case ".json":
                return "text/json;charset=utf-8";
            case ".gif":
                return "image/gif";
            case ".css":
                return "text/css"
        }
    }
}

module.exports = LcApp;

server.js

let LcApp = require('./lcApp');

let app = new LcApp();
// 好处:保护路径,防止被修改
app.staticDir = '/abc';

app.on('/', (req, res) => {
    res.setHeader("Content-type", "text/html;charset=utf-8");
    res.end("这是首页<img src='./abc/1.jpg' />");
})

app.on('/dlam', (req, res) => {
    if (req.pathObj.base == "index") {
        res.end("dlam");
    } else {
        res.end("dlamaaaa");
    }
})



app.run(80, () => {
    console.log("服务器启动:", "http://127.0.0.1");
})

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值