当前位置:首页 > 其他问题 > node.js 封装 获取post get

node.js 封装 获取post get

王丛4年前 (2021-04-14)其他问题478
const http = require("http");
const app=require('./module/route');
const ejs = require("ejs");

//注册web服务
http.createServer(app).listen(3000);

app.static("static");    //修改默认静态web目录

//配置路由
app.get('/',function(req,res){
    res.send("首页")
})

//配置路由
app.get('/login',function(req,res){
    // res.writeHead(200, { 'Content-Type': 'text/html;charset="utf-8"' });
    // res.end('执行登录操作');
    ejs.renderFile("./views/form.ejs",{},(err,data)=>{
        res.send(data)
    })
})

app.post('/doLogin',function(req,res){
    console.log(req.body);
    res.send(req.body)
})
 
 
 
 
 
 
 
 
const fs = require('fs');
const path = require('path');
const url = require('url');

//扩展res
function changeRes(res) {
    res.send = (data) => {
        res.writeHead(200, { 'Content-Type': 'text/html;charset="utf-8"' });
        res.end(data);
    }
}

//根据后缀名获取文件类型
function getFileMime(extname) {
    var data = fs.readFileSync('./data/mime.json'); //同步方法
    let mimeObj = JSON.parse(data.toString());
    return mimeObj[extname];

}
//静态web服务的方法
function initStatic(req, res, staticPath) {

    //1、获取地址
    let pathname = url.parse(req.url).pathname;
    // pathname = pathname == '/' ? '/index.html' : pathname;
    let extname = path.extname(pathname);
    //2、通过fs模块读取文件

    if (extname) {  //如果有后缀名用静态web服务处理
        try {
            let data = fs.readFileSync('./' + staticPath + pathname);
            if (data) {
                let mime = getFileMime(extname);
                res.writeHead(200, { 'Content-Type': '' + mime + ';charset="utf-8"' });
                res.end(data);
            }
        } catch (error) {

            console.log(error);
        }
    }

}

let server = () => {
    let G = {
        _get: {},
        _post: {},
        staticPath: 'static' //,默认静态web目录
    };


    let app = function (req, res) {
        //扩展res的方法
        changeRes(res);
        //配置静态web服务
        initStatic(req, res, G.staticPath);

        let pathname = url.parse(req.url).pathname;
        //获取请求类型
        let method = req.method.toLowerCase();
        console.log(method);
        let extname = path.extname(pathname);
        if (!extname) {  //如果有后缀名用静态web处理
            if (G['_' + method][pathname]) {
                if (method == "get") {
                    G['_' + method][pathname](req, res);  //执行方法
                } else {
                    //post  获取post的数据 把它绑定到req.body
                    let postData = '';
                    req.on('data', (chunk) => {
                        postData += chunk;
                    })
                    req.on('end', () => {
                        req.body = postData;
                        G['_' + method][pathname](req, res);  //执行方法
                    })

                }

            } else {
                res.writeHead(404, { 'Content-Type': 'text/html;charset="utf-8"' });
                res.end('页面不存在');
            }
        }
    }
    //get请求
    app.get = function (str, cb) {
        //注册方法
        G._get[str] = cb;
    }
    //post请求
    app.post = function (str, cb) {
        //注册方法
        G._post[str] = cb;
    }
    //配置静态web服务目录
    app.static = function (staticPath) {
        G.staticPath = staticPath;
    }

    return app;
}
module.exports = server();
 
 
 
 
console.log(window);
打赏

扫描二维码推送至手机访问。

版权声明:本文由一段神奇的代码发布,如需转载请注明出处。

分享给朋友:

相关文章

node.js 创建静态 web服务 和路由

node.js 创建静态 web服务 和路由

route.js代码如下所示。   const fs=require('fs'); const path=require('path'); const url=require('url');   //私有方法 let getFileMime  = func...

mongDB数据库操作

mongDB数据库操作

1、连接数据库 清屏: cls 查看所有数据库列表 show dbs 二、 创建数据库、查看、删除数据库 1、使用数据库、创建数据库 use itying 如果真的想把这个数据库创建成功,那么必须插入一个数据。 数据库中不能直接插入数据,只能往集合(collections)中插入数...

webpack  的一些配置理解

webpack 的一些配置理解

˂a name="自己根据视频敲的代码 已经上传到gitee 在这记录一下 为了自己理解 每一个代码都加上自己的理解注释 ,重点注重webpack 的版本问题" class="reference-link" href="#"˃自己根据视频敲的代码 已经上传到gitee 在这记录一下 为了自己理解 每...

程序员这几个行为,一看就是缺乏经验!

程序员这几个行为,一看就是缺乏经验!

程序员的工作经验和从事这个行业的工作年限直接相关。这句话在某种程度上是对的,但是从事这项工作的年限,并不一定代表获得了相同年限的工作经验。正如一句话所说:“我们以为我们是工作了十年,其实却只有一年的工作经验,只不过又重复用了九年”。 今天我们来深入剖析下程序开发人员缺乏经验的几种表现,明确了问题,...

[原创]应届生论文查重

[原创]应届生论文查重

万方免费查重(应届生免费一次):chsi.wanfangtech.net PaperDay(标准版永久免费,旗舰版每日限免):www.paperday.cn 论文狗(每日免费一次): www.lunwengo.net PaperYY(每日免费一次,11点多免费两次):www.paperyy....

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。