搭建node项目目录以及基本的文件

初始化package.json文件

执行下面命令生成package.json文件

npm init --yes

创建项目目录

创建路由目录routes,存放静态资源目录public,视图目录views

安装项目所需的依赖

"dependencies": {
"art-template": "^4.12.2",
"koa": "^2.5.0",
"koa-art-template": "^1.1.1",
"koa-bodyparser": "^4.2.0",
"koa-router": "^7.4.0",
"koa-session": "^5.8.1",
"koa-static": "^4.0.2",
"mongodb": "^3.0.4"
}

app.js文件初始化

const Koa = require('koa')
const router = require('koa-router')(); var app=new Koa(); //配置路由
router.get('/',(ctx)=>{
ctx.body='这是一个首页'
}) //启动路由
app.use(router.routes()).use(router.allowedMethods()); app.listen(8008);

然后启动node服务

配置路由

接下来我们定义两个路由模块admin.js(不启动路由只是导出路由模块)和api.js(在模块中启动路由(接口模块))

var router = require('koa-router')();

router.get('/',(ctx)=>{
ctx.body='后台管理系统首页'
}) router.get('/user',(ctx)=>{
ctx.body='用户管理'
}) router.get('/focus',(ctx)=>{
ctx.body='轮播图管理'
})
router.get('/news',(ctx)=>{
ctx.body='新闻管理'
}) module.exports=router;
var router=require('koa-router')();

router.get('/',(ctx)=>{
ctx.body={"title":"这是一个api"};
}) router.get('/newslist',(ctx)=>{
ctx.body={"title":"这是一个新闻接口"};
}) router.get('/focus',(ctx)=>{
ctx.body={"title":"这是一个轮播图的api"};
}) module.exports=router.routes();

然后在项目入口中即app.js引入两个路由子模块,api.js路由模块中已经启动了路由,引入后直接使用,admin.js路由模块没有启动路由只是导出,引入后需要启动路由

const Koa = require('koa')
const router = require('koa-router')();
//引入路由的子模块
var admin = require('./routes/admin.js');
var api = require('./routes/api.js'); var app=new Koa(); //配置路由
router.get('/',(ctx)=>{
ctx.body='这是一个首页'
}) // 配置子路由 层级路由
router.use('/admin',admin.routes());
router.use('/api',api); // 在模块里面暴露路由并且启动路由(启动路由在子模块中) //启动路由
app.use(router.routes()).use(router.allowedMethods()); app.listen(8008);

重启服务进行测试,访问根路由的时候是首页

以上案例中模块只分了一个层级,如果项目比较复杂有可能会分更多的层级,接下来我们把admin.js这个路由模块在细分一个层级

首先在routes中在创建一个admin的路由,表示存放admin模块中的子模块,里面分别(newscate.js,user.js)

// 用户的增加修改删除

var router = require('koa-router')();

router.get('/',async (ctx)=>{
ctx.body='新闻分类首页';
}) router.get('/add',async (ctx)=>{
ctx.body='增加新闻分类';
}) router.get('/edit',async (ctx)=>{
ctx.body='编辑新闻分类';
})
router.get('/delete',async (ctx)=>{
ctx.body='编辑新闻分类';
}) module.exports = router.routes();
// 用户的增加修改删除

var router=require('koa-router')();

router.get('/',async (ctx)=>{
ctx.body='用户首页';
}) router.get('/add',async (ctx)=>{
ctx.body='用户添加';
}) router.get('/edit',async (ctx)=>{
ctx.body='用户编辑';
}) router.get('/delete',async (ctx)=>{
ctx.body='删除用户';
}) module.exports = router.routes();

然后将这两个子模块在admin.js模块中引入

var router = require('koa-router')();
var user = require('./admin/user.js');
var newscate = require('./admin/newscate.js'); //配置admin的子路由 层级路由
router.get('/',(ctx)=>{
ctx.body='后台管理系统首页'
}) router.use('/user',user);
router.use('/newscate',newscate); module.exports = router.routes();

最后将admin在app.js中引入

const Koa = require('koa')
const router = require('koa-router')();
//引入路由的子模块
var admin = require('./routes/admin.js'); var app=new Koa(); //配置路由
router.get('/',(ctx)=>{
ctx.body='这是一个首页'
}) // 配置子路由 层级路由
router.use('/admin',admin.routes()); //启动路由
app.use(router.routes()).use(router.allowedMethods()); app.listen(8008);

重启node服务,浏览器访问测试结果

项目中有很多路由时只有一级的,比如/about去访问关于我们的页面,这种情况我们可以在routes中定义一个index.js的模块

var router = require('koa-router')();

router.get('/',async (ctx)=>{
ctx.body='这是一个首页'
})
//注意 前台后后台匹配路由的写法不一样
router.get('/case',(ctx)=>{
ctx.body='案例'
}) router.get('/about',async (ctx)=>{
ctx.body='关于我们'
}) module.exports = router.routes();

然后再app.js中引入并使用

const Koa = require('koa')
const router = require('koa-router')(); //引入路由的子模块index
var index = require('./routes/index.js');
var admin = require('./routes/admin.js'); var app=new Koa(); //配置路由
router.use(index); // 配置子路由 层级路由
router.use('/admin',admin); //启动路由
app.use(router.routes()).use(router.allowedMethods()); app.listen(8008);

重启服务,浏览器访问测试

koa 搭建模块化路由/层级路由的更多相关文章

  1. Vue-Router路由 Vue-CLI脚手架和模块化开发 之 路由常用配置与路由嵌套

    vue-router路由常用配置 1.mode:配置路由模式,默认为hash,由于URL很丑,可以修改为history,但是需要服务端的支持: 以上一篇的博文为实例: 初始时url的显示: 使用mod ...

  2. 入职第二天:使用koa搭建node server是种怎样的体验

    今天是我入职第二天,leader跟我说,昨天配置好了服务端渲染的文件,今天就先研究研究如何使用koa来搭建一个node server吧! 按照惯例,我去koa官网查了一下什么是koa,结果官网很简单的 ...

  3. vue路由--命名路由

    有时我们通过一个名称来标识一个路由显得更方便一些,特别是在链接一个路由,或者是执行一些跳转的时候.你可以在创建 Router 实例的时候,在 routes 配置中给某个路由设置名称. 我们直接在路由下 ...

  4. vue路由--动态路由

    前面介绍的路由都是路径和组件一对一映射的 有时候需要多个路径映射到一个组件,这个组件根据参数的不同动态改变,这时候需要用到动态路由 动态路由这样定义路由路径: path: '/foo/:id'--可以 ...

  5. vue路由--静态路由

    vue的单页面应用是基于路由和组件的,路由用于设定访问路径,并将路径和组件映射起来.传统的页面应用,是用一些超链接来实现页面切换和跳转的.在vue-router单页面应用中,则是路径之间的切换,也就是 ...

  6. [水煮 ASP.NET Web API2 方法论](3-2)直接式路由/属性路由

    问题 怎么样可以使用更贴近资源(Controller,Action)的方式定义路由. 解决方案 可以使用属性路由直接在资源级别声明路由.只要简单的在 Action 上使用属性路由 RouteAttri ...

  7. 海蜘蛛网络科技官方网站 :: 做最好的中文软路由 :: 软件路由器 :: 软路由 :: 软件路由 :: RouterOs

    海蜘蛛网络科技官方网站 :: 做最好的中文软路由 :: 软件路由器 :: 软路由 :: 软件路由 :: RouterOs 企业简介 武汉海蜘蛛网络科技有限公司成立于2005年,是一家专注于网络新技术研 ...

  8. ASP.NET没有魔法——ASP.NET MVC 直连路由(特性路由)

    之前对Controller创建的分析中,知道了Controller的创建是有两个步骤组成,分别是Controller的类型查找以及根据类型创建Controller实例. 在查询Controller的类 ...

  9. Angular routing生成路由和路由的跳转

    Angular routing生成路由和路由的跳转 什么是路由 路由的目的是可以让根组件按照不同的需求动态加载不同的组件. 根据不同地址,加载不同组件,实现单页面应用. Angular 命令创建一个配 ...

随机推荐

  1. 2019 讯飞java面试笔试题 (含面试题解析)

      本人5年开发经验.18年年底开始跑路找工作,在互联网寒冬下成功拿到阿里巴巴.今日头条.讯飞等公司offer,岗位是Java后端开发,因为发展原因最终选择去了讯飞,入职一年时间了,也成为了面试官,之 ...

  2. 全网独发gensim中similarities.Similarity用法

    index = similarities.MatrixSimilarity(lsi[corpus]) # 管网的原文翻译如下: 警告:similarities.MatrixSimilarity类仅仅适 ...

  3. 关于zynq系列板卡设计VREFP_0参考电压的疑问及解答

    使用板卡:Z-turn Board 芯片:Xilinx Zynq-7010/7020处理器 有工程师在试用zynq系列Z-turn Board时提出:在原理图P3页 Bank0上VREFP_0端接地的 ...

  4. Django:表多对多查询、聚合分组、FQ查询、事务

    1表多对多的关系查询 准备工作创建表结构 from django.db import models # Create your models here. class Publisher(models. ...

  5. react native 集成react navigation报错

    集成后出现:“Invalid escape sequence at line 1 column 29 path $[0].name”的错误. 解决办法:

  6. selenium模拟鼠标键盘操作

    简单操作: 1.点击(鼠标左键)页面按钮:click() 2.清空输入框:clear() 3.输入字符串:send_keys()submit提交表单: 1.一般情况可以点击搜索按钮来搜索 2.也可以用 ...

  7. StringUtils系列之StringUtils.isNotBlank()和StringUtils.isNotBlank()的区别

    /** 1. * StringUtils.isNotBlank(); * 判断参数是否不为空. * 1.如果不为空返回true. * 2.如果为空返回false. * StringUtils.isNo ...

  8. 02-CSS常用样式

    本篇主要介绍css的常用样式,以及网页布局相关知识.绝对定位和相对定位,盒子模型.css权重.以及css选择器: 绪论:CSS基本介绍 为了让网页元素的样式更加丰富,也为了让网页的内容和样式能拆分开, ...

  9. 【Spring Boot】Spring Boot之统一异常处理

    一.统一异常处理的作用 在web应用中,请求处理时,出现异常是非常常见的.所以当应用出现各类异常时,进行异常的统一捕获或者二次处理(比如空指针异常或sql异常正常是不能外抛)是非常必要的,然后右统一异 ...

  10. 使用kubeadm 新加入节点(原始token过期后)---转发

    kubeadm join kubeadm init 安装完成后你会得到以下的输出,使用join指令可以新增节点到集群,此token 有效期为24小时 You should now deploy a p ...