快捷搜索:

Node.js用Koa框架去搭建http服务

用Koa框架去构建http服务器,在构建http服务需要用到http模块,由于http模块是Node.js自带的模块所以不需要我们从网上去下载.

该项目会用到的几个模块

直接通过npm去安装例如: npm install koa

在项目中先建立一个app.js文件,然后引用我们已经安装过的模块 然后在 app.js里面注册或者说设置

然后我们在写一个处理url的js,类似于路由,创建一个controller.js和app.js是同级目录

const fs = require(fs);

function addMapping(router, mapping) {
    for (var url in mapping) {
        if (url.startsWith(GET )) {
            var path = url.substring(4);
            router.get(path, mapping[url]);
            /*console.log(`register URL mapping: GET ${path}`);*/
        } else if (url.startsWith(POST )) {
            var path = url.substring(5);
            router.post(path, mapping[url]);
           /* console.log(`register URL mapping: POST ${path}`);*/
        } else {
            /*console.log(`invalid URL: ${url}`);*/
        }
    }
}

function addControllers(router, dir) {
    var files = fs.readdirSync(__dirname + /controllers);
    var js_files = files.filter((f) => {
        return f.endsWith(.js);  //用于检测后缀为.js得文件
    });
   /* console.log(js_files);*/
    for (var f of js_files) {
        /*console.log(`process controller: ${f}...`);*/
        let mapping = require(__dirname + /controllers/ + f);
        addMapping(router, mapping);
    }
}

module.exports = function (dir) {
    let
        controllers_dir = dir || controllers, // 如果不传参数,扫描目录默认为controllers
        router = require(koa-router)();
    addControllers(router, controllers_dir);
    return router.routes();
};

引入fs模块对写url的文件的文件夹进行扫描处理,http请求过来后根据url来对controllers文件夹进行扫描,扫描其目录下的url文件,通过请求的url来找到对应的文件中的请求。

接下来发现我们没用controllers文件夹,所以我们创建一个该文件夹。然后在里面创建一个Index.js 就把这个当作index.js把 手动滑稽,controllers文件夹下面的文件随便起名字,我们也不用引用调用之类的。因为我们已经对这个文件夹进行了全盘扫描了。 接下来就在index.js里面写返回。

var fn_hello = async (ctx, next) => {
	ctx.response.body = 你好!nod.js的koa;
}

返回已经做好了,你现在去请求根本不知道从哪里请求。也没有url地址,是因为我们没有给这个返回绑定相应的请求路径。其实我们就把定义的这个变量绑定对应的请求地址然后exports出去

module.exports = {
    GET /index: fn_hello
};

ok了,这下直接在该项目下输入node app.js启动项目,然后打开 http://localhost:端口号/index 就可以看见你的请求了

配置信息都要写在package.json里面 这是我的项目结构,public目录下我都放的一些链接之类的,CommFun.js里面是写了一些公共方法,Redis.js是链接Redis。其实链接Redis很简单。 model下面放的是我处理返回的一些业务逻辑

class RedisOpe{
    constructor(){
        this.Redis = require("redis");
        this.linkRedis = this.Redis.createClient(端口之类的好像,Redis地址);
    }
    async createRedis(callback){
           await this.linkRedis.on("error",function (error){
                /*console.log("RedisServer is error!
" + error);*/
                callback(error);
            });
            await this.linkRedis.on(connect,function(){
                /*console.log(redis connect success!);*/
                callback(ok);
            });
        }

}

module.exports={
    RedisOpe
};
//redis操作完成记得关闭redis,关闭方法linkRedis.end(true);

上面就是链接Redis的方法,如果在处理返回的时候需要调用Redis里面的数据那么就直接引入这个文件。然后再进行Redis的增删改查。用完记得关闭Redis

我把端口号放在config.js里面在

这就跟我app.js里面的对上了

推荐看新版的:https://blog..net/a519637560/article/details/106812152

经验分享 程序员 微信小程序 职场和发展