使用koa2创建web项目的方法步骤


Posted in Javascript onMarch 12, 2019

Github上有一个express风格的koa脚手架,用着挺方便,一直以来使用koa开发web项目用的也都是那个脚手架,今天想自己从头搭一个web项目,就折腾了一下

脚手架地址: https://github.com/17koa/koa-generator

初始化

使用 npm init 初始化一个nodejs项目

mkdir koa-demo
cd koa-demo
npm init

一直回车即可,创建好之后目录里会有一个 package.json 文件

安装依赖

npm install --save koa koa-body koa-logger koa-json-error koa-router koa-static koa-njk
  • koa
  • koa-body 解析http请求参数的,支持 multipart/form-data application/x-www-urlencoded application/json 三种参数类型
  • koa-logger 显示http请求的日志
  • koa-router 路由
  • koa-json-error 程序出异常输出json
  • koa-static 映射静态资源文件
  • koa-njk nunjucks模板解析

配置

在根目录下创建 app.js 然后贴上下面代码,代码内有注释,很简单

// 引入依赖
const koa = require('koa');
const koa_body = require('koa-body');
const koa_json_error = require('koa-json-error');
const koa_logger = require('koa-logger');
const koa_static = require('koa-static');
const koa_njk = require('koa-njk');
const path = require('path');

// 初始化koa
const app = new koa()

// 引入路由配置文件,这个在下面说明
const routers = require('./routes/routers');

// 配置程序异常输出的json格式
app.use(koa_json_error((err) => {
 return {
  code: err.status || 500,
  description: err.message
 }
}));

// 添加静态资源文件映射
app.use(koa_static(path.join(__dirname, 'static')))
// 添加nunjucks模板
app.use(koa_njk(path.join(__dirname, 'views'), '.njk', {
 autoescape: true,
}, env => {
 // 添加自己的过滤器
 env.addFilter('split', (str, comma) => {
  if (str) {
   return str.split(comma);
  } else {
   return '';
  }
 });
}));

// 解析表单提交参数
app.use(koa_body());
// 显示请求和响应日志
app.use(koa_logger());

// 路由
app.use(routers.routes())

// 程序启动监听的端口
const port = 3000;

app.listen(port);
console.log('Listening on ' + port);

路由

在根目录下创建 routes 文件夹

在 routes 文件夹内创建 index.js routers.js 文件

在 index.js 文件内添加如下代码

// 测试路由,输出请求的参数
exports.index = async ctx => {
 const body = ctx.request.body;
 const query = ctx.request.query;
 const params = ctx.params;
 ctx.body = {
  body: body,
  query: query,
  params: params,
 };
}

// 测试nunjucks模板
exports.view = async ctx => {
 await ctx.render('index', {
  title: 'Koa'
 })
}

// 测试异常
exports.test_error = async ctx => {
 throw new Error('测试异常');
}

配置路由,在 routers.js 文件内配置路由

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

// route
const index = require('./index');

router.get('/view', index.view);
router.get('/index', index.index);
router.get('/index:id', index.index);
router.post('/index', index.index);
router.get('/test_error', index.test_error);

module.exports = router

静态文件

在根目录创建文件夹 static 添加 app.css 文件,写上下面代码

body {
 background-color: #eee;
}

模板

在根目录创建文件夹 views 添加 index.njk 文件,写上下面代码

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <meta name="viewport" content="width=device-width, initial-scale=1.0">
 <meta http-equiv="X-UA-Compatible" content="ie=edge">
 <title></title>
 <link rel="stylesheet" href="/app.css" rel="external nofollow" >
</head>
<body>

Hello, ! <br>

<ul>
 <!-- 使用自定义的过滤器 -->
 
</ul>

</body>
</html>

启动

安装 nodemon

npm install -g nodemon

在根目录运行命令启动项目

nodemon app.js

测试

访问 http://localhost:3000/view/

使用koa2创建web项目的方法步骤

访问 http://localhost:3000/index/ 可以看到输出的json

{
 "body": {},
 "query": {},
 "params": {}
}

访问 http://localhost:3000/index/?id=1

{
 "body": {},
 "query": {
  "id": "1"
 },
 "params": {}
}

访问 http://localhost:3000/index/1

{
 "body": {},
 "query": {},
 "params": {
  "id": "1"
 }
}

POST 请求 curl -X POST http://localhost:3000/index/ -d '{"id": "1"}' -H 'Content-Type:application/json'

{
 "body":{
  "id":"1"
 },
 "query":{},
 "params":{}
}

访问 http://localhost:3000/test_error

{
 "code": 500,
 "description": "测试异常"
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JS读取cookies信息(记录用户名)
Jan 10 Javascript
Jquery写一个鼠标拖动效果实现原理与代码
Dec 24 Javascript
js获取电脑分辨率的思路及操作
Nov 22 Javascript
本人自用的global.js库源码分享
Feb 28 Javascript
jQuery EasyUI Dialog拖不下来如何解决
Sep 28 Javascript
JavaScript实现倒计时代码段Item1(非常实用)
Nov 03 Javascript
创建一个类Person的简单实例
May 17 Javascript
JavaScript版经典游戏之扫雷游戏完整示例【附demo源码下载】
Dec 12 Javascript
js下载文件并修改文件名
May 08 Javascript
JS实现元素上下左右移动效果
Oct 18 Javascript
ES6解构赋值的功能与用途实例分析
Oct 31 Javascript
Angular整合zTree的示例代码
Jan 24 Javascript
如何为你的JS项目添加智能提示与类型检查详解
Mar 12 #Javascript
Vue项目引发的「过滤器」使用教程
Mar 12 #Javascript
通过JS运行机制的角度说说作用域
Mar 12 #Javascript
Jquery的autocomplete插件用法及参数讲解
Mar 12 #jQuery
如何使用pm2快速将项目部署到远程服务器
Mar 12 #Javascript
详解用Webpack与Babel配置ES6开发环境
Mar 12 #Javascript
详解微信小程序框架wepy踩坑记录(与vue对比)
Mar 12 #Javascript
You might like
php join函数应用
2011/05/04 PHP
PHP图片验证码制作实现分享(全)
2012/05/10 PHP
destoon后台网站设置变成空白的解决方法
2014/06/21 PHP
php获取系统变量方法小结
2015/05/29 PHP
PHP大文件分割分片上传实现代码
2020/12/09 PHP
capacityFixed 基于jquery的类似于新浪微博新消息提示的定位框
2011/05/24 Javascript
给jqGrid数据行添加修改和删除操作链接(之一)
2011/11/04 Javascript
javascript实现浏览器窗口传递参数的方法
2014/09/03 Javascript
Angular用来控制元素的展示与否的原生指令介绍
2015/01/07 Javascript
详解jQuery向动态生成的内容添加事件响应jQuery live()方法
2015/11/02 Javascript
js实现图片上传并正常显示
2015/12/19 Javascript
实现React单页应用的方法详解
2016/08/02 Javascript
浅谈JavaScript find 方法不支持IE的问题
2017/09/28 Javascript
Vue SSR 组件加载问题
2018/05/02 Javascript
使用webpack打包后的vue项目如何正确运行(express)
2018/10/26 Javascript
详解vue-router导航守卫
2019/01/19 Javascript
Ubuntu 下 vim 搭建python 环境 配置
2017/06/12 Python
Python爬虫获取整个站点中的所有外部链接代码示例
2017/12/26 Python
解决Python设置函数调用超时,进程卡住的问题
2019/08/08 Python
Tensorflow tensor 数学运算和逻辑运算方式
2020/06/30 Python
matplotlib.pyplot.plot()参数使用详解
2020/07/28 Python
英国工具中心:UK Tool Centre
2017/07/10 全球购物
英国家用电器折扣网站:Electrical Discount UK
2018/09/17 全球购物
团组织关系介绍信
2014/01/12 职场文书
物业管理毕业生的自我评价
2014/02/17 职场文书
高中军训第一天感言
2014/03/06 职场文书
爱护公物演讲稿
2014/09/09 职场文书
党的群众路线教育实践活动个人整改措施
2014/10/27 职场文书
飞越疯人院观后感
2015/06/09 职场文书
2015暑假打工实践报告
2015/07/13 职场文书
python实现简单的井字棋
2021/05/26 Python
python四个坐标点对图片区域最小外接矩形进行裁剪
2021/06/04 Python
剑指Offer之Java算法习题精讲二叉树专项训练
2022/03/21 Java/Android
GO语言字符串处理函数之处理Strings包
2022/04/14 Golang
如何利用python实现列表嵌套字典取值
2022/06/10 Python
SpringBoot详解整合Redis缓存方法
2022/07/15 Java/Android