在之前的文章中,已经可以实现url与处理器函数之间的映射。但是把代码直接写在app.js中似乎十分不妥,一个是会造成app.js文件的冗长,二是不好扩展和修改。为了解决这个问题,可以将处理函数封装为一个个模块,在启动服务器时再将url和处理器模块映射起来。这样就可以解决如上所述的问题。
但是除了将处理器函数封装为单独的模块之外,还需要一段将url和处理器模块映射起来的代码用于在服务器启动的时候执行。
首先创建一个controllers目录,在此目录下编写处理器模块。一个简单的示例如下:
var hello = async (ctx, next) => {
var name = ctx.params.name;
ctx.response.body = `<h1>Hello, ${name}!</h1>`;
};
module.exports = {
'GET /hello/:name':hello
};
然后再加上一个controller.js模块,在此模块中映射url和处理器模块,代码如下:
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]);