koa2-重构url

本文介绍了如何重构Koa2应用中的URL。首先复制learn_koa_url目录为learn_koa_url1,并在新目录下创建.vscode和controllers子目录。在.vscode中设置launch.json,controllers中包含index.js和login.js。接着展示了hello.js、index.js、app.js和controllers.js的代码更新内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.将learn_koa_url文件夹复制一份命名为(learn_koa_url1)

2.在(learn_koa_url1)下新建两个文件夹

(1).vscode --> launch.json

(2)controllers -- > index.js和login.js

最后目录结构如下

3.整理后的代码如下

(1)hello.js的代码

var fn_hello = async(ctx, next) => {
    var name = ctx.params.name;
    ctx.response.body = `<h1>Hello,${name}!</h1>`
};
module.exports = {
    'GET/hello/:name': fn_hello,
}

(2)index.js的代码如下

var fn_index = async (ctx, next) => {
    ctx.response.body = `<h1>Index</h1>
    <form action="/signin" method="post">
       <p>Name:<input name="name" value="koa"></p>
       <p>Password: <input name="password" type="password"></p>
       <p><input type="submit" value="Submit"></p>
    </form>`;
}

var fn_signin = async(ctx, next) => {
    var name = ctx.request.body.name || '',
        password = ctx.request.body.password || '';
        console.log(`signin with name:${name},password:${password}`);
    if (name==='koa' && password === '12345') { 
        ctx.response.body = `<h1>Welcome,${name} !</h1>`;
    } else {
        ctx.response.body = `<h1>Login failed!</h1>
        <p><a href='/'>Try again</a></p>`
    }
};

module.exports = {
    'GET /' : fn_index,
    'POST /signin' : fn_signin
}

 

(3)app.js的代码如下

const Koa = require('koa');

const bodyParser = require("koa-bodyparser");

const controller = require('./controller');

const app = new Koa();

// log request URL:
app.use(async (ctx, next) => {
    console.log(`Process ${ctx.request.method} ${ctx.request.url}...`);
    await next();
});

app.use(bodyParser());

app.use(controller());

app.listen(3000);
console.log('app started at port 3000...');

(4)controllers.js的代码如下

const fs = require('fs');

function addMapping(router,mapping) {
    for (var url in mapping) {
        if(url.startsWith('GET')) {
            // 郭茹url类似 ‘GET xxx’ :
            var path = url.substring(4);
            router.get(path,mapping[url]);
            console.log(`register URL mapping:GET ${path}`);
        } else if(url.startsWith('POST')) {
            // 如果url类似 'POST xxx'
            var path = url.substring(5);
            router.post(path,mapping[url]);
            console.log(`register URL mapping:POST ${path}`);
        } else if (url.startsWith('PUT ')) {
            var path = url.substring(4);
            router.put(path, mapping[url]);
            console.log(`register URL mapping: PUT ${path}`);
        } else if (url.startsWith('DELETE ')) {
            var path = url.substring(7);
            router.del(path, mapping[url]);
            console.log(`register URL mapping: DELETE ${path}`);
        } else {
            // 无效的URL
            console.log(`invalid URL: ${url}`);
        }
    }
}

function addControllers(router,dir) {
    // var files = fs.readdirSync(__dirname + '/controllers');
    // // 过滤出.js文件:
    // var js_files = files.filter((f)=>{
    //     return f.endsWith('.js');
    // })
    // // 处理每个js文件
    // for(var f of js_files) {
    //     console.log('process controller:${f}...');
    //     // 导入js文件
    //     let mapping = require(__dirname + '/controllers/' + f);
    //     addMapping(router,mapping);
    // }
    fs.readdirSync(__dirname + '/' + dir).filter((f)=>{
        return f.endsWith('.js');
    }).forEach((f)=>{
        console.log('process controller:${f}...');
        // 导入js文件
        let mapping = require(__dirname + '/' + dir + '/' + 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();
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值