/**
* request文档
* request.path 别名ctx.path
* request.method 别名ctx.method
*
* body上面放返回的数据, koa会从body上取, 然后返回给客户端
* ==body 返回字符串: ctx.body=“hello, world"
* === 返回对象: ctx.body={key:1234}
*/
const Koa = require('koa')
const app = new Koa()
app.use(async (ctx, next) => {
console.log(ctx.method);
console.log(ctx.path);
if (ctx.path === '/get/name' && ctx.method === 'GET') {
ctx.body = {
key: 'Hello,world'
}
}
})
app.listen(3000)
/**
*书籍
*/
const Router = require('koa-router')
const router = new Router()
router.get('/v1/book/latest', async (ctx, next) => {
ctx.body = {
key: "book"
}
})
module.exports = router
/**
* 期刊
*/
const Router = require('koa-router')
const router = new Router()
router.get('/v1/classic/latest', async (ctx, next) => {
ctx.body = {
key: "classic"
}
})
module.exports = router
/**
* 多Router拆分路由
* api都是有版本的
* v1,v2,v3支持三个版本
* 开闭原则:对修改关闭,对拓展开放
* 版本号控制:
* 1.路径里面 e.g '/v1/get/userinfo'
* 2.查询字符串里面 e.g '/get/userinfo?version=v1'
* 3.header 放到http header里面
*/
const Koa = require('koa')
const book = require('./api/v1/book')
const classic = require('./api/v1/classic')
const app = new Koa()
app.use(book.routes())
app.use(classic.routes())
app.listen(3000)
nodemon会在代码修改后,保存,自动重启server,很方便
# 全局安装nodemon
npm i nodemon -g
# 在项目根目录下面
nodemon app.js
nodemon example/app11.js
- 打断点
- 按 F5 键 (执行到断点处,会暂停) 或者 点击 左侧工具栏的爬虫按钮 点击调试
- 点击 左侧工具栏的爬虫按钮 点击调试 也可以添加配置文件
点击 左侧工具栏的爬虫按钮 点击调试 也可以添加配置文件 ,然后新增一种
在当前文件启动调试
name是可以自定义的
{
"type": "node",
"request": "launch",
"name": "启动当前文件",
"program": "${file}"
}
- 点击左侧'爬虫'
- 选择 nodemon
- 点击左侧调试 绿色三角号
/**
* require-directory 实现路由自动加载
* //相对于 入口文件的所有的 模块
* - const modules=requireDirectory(module)
* //会返回所有模块 包括不是路由的模块
* - const modules = requireDirectory(module, './api/v1')
* //在visit 做过滤,只返回路由模块 .路由模块 导出的是module.exports=router .是Router的一个实例,所以可以通过判断 item instanceof Router 判断是不是一个路由
* - const modules=requireDirectory(module,'./api/v1',{
* visit:()=>{
* if (item instanceof Router) {
app.use(item.routes())
}
* }
* })
*/
const Koa = require('koa')
const Router = require('koa-router')
const requireDirectory = require('require-directory')
const app = new Koa()
// const modules=requireDirectory(module)
// const modules = requireDirectory(module, './api/v1') //
const modules = requireDirectory(module, './api/v1', {
visit: (item) => {
if (item instanceof Router) {
app.use(item.routes())
}
}
})
app.listen(3000)
/**
* 初始化 路由
* 类里面静态方法的好处,不需要实例化
* InitManager.app = app; //把app放到类上面,思想很重要。这样调用的时候,不需要传参数了
* const apiDirectory = `${process.cwd()}/app/api/v1` 用process.cwd()解决硬编码问题
*/
const requireDirectoy = require('require-directory')
const Router = require('koa-router');
class InitManager {
static init (app) {
InitManager.app = app
//注册路由
InitManager.registerRouter()
}
static registerRouter () {
const apiDirectory = `${process.cwd()}/app/api/v1`
requireDirectoy(module, apiDirectory, {
visit: (item) => {
if (item instanceof Router) {
InitManager.app.use(item.routes())
}
}
})
}
}
module.exports = InitManager
/**
* 初始化 路由
* 类里面静态方法的好处,不需要实例化
* InitManager.app = app; //把app放到类上面,思想很重要。这样调用的时候,不需要传参数了
* const apiDirectory = `${process.cwd()}/app/api/v1` 用process.cwd()解决硬编码问题
*/
const requireDirectoy = require('require-directory')
const Router = require('koa-router');
class InitManager {
static init (app) {
InitManager.app = app
//注册路由
InitManager.registerRouter()
}
static registerRouter () {
const apiDirectory = `${process.cwd()}/app/api/v1`
requireDirectoy(module, apiDirectory, {
visit: (item) => {
if (item instanceof Router) {
InitManager.app.use(item.routes())
}
}
})
}
}
module.exports = InitManager