使用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 相关文章推荐
jquery日历控件实现方法分享
Mar 07 Javascript
javascript内置对象arguments详解
Mar 16 Javascript
Bootstrap中CSS的使用方法
Feb 17 Javascript
Boostrap入门准备之border box
May 09 Javascript
AngularJS 如何在控制台进行错误调试
Jun 07 Javascript
在web中js实现类似excel的表格控件
Sep 01 Javascript
微信小程序 常用工具类详解及实例
Feb 15 Javascript
Vue.js点击切换按钮改变内容的实例讲解
Aug 22 Javascript
JavaScript模板引擎实现原理实例详解
Dec 14 Javascript
vue+element树组件 实现树懒加载的过程详解
Oct 21 Javascript
three.js利用卷积法如何实现物体描边效果
Nov 27 Javascript
关于Js中new操作符的作用详解
Feb 21 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
火车头discuz6.1 完美采集的php接口文件
2009/09/13 PHP
PHP5.5在windows安装使用memcached服务端的方法
2014/04/16 PHP
PHP中把对象转换为关联数组代码分享
2015/04/09 PHP
php提交过来的数据生成为txt文件
2016/04/28 PHP
PHP分页初探 一个最简单的PHP分页代码的简单实现
2016/06/21 PHP
PHP+iframe图片上传实现即时刷新效果
2016/11/18 PHP
PHP操作MongoDB实现增删改查功能【附php7操作MongoDB方法】
2018/04/24 PHP
网页里控制图片大小的相关代码
2006/06/25 Javascript
麦鸡的TAB切换功能结合了javascript和css
2007/12/17 Javascript
javascript 定义初始化数组函数
2009/09/07 Javascript
js中根据字数截取字符串,不能截断url
2012/01/12 Javascript
Jquery 点击按钮自动高亮实现原理及代码
2014/04/25 Javascript
JS中自定义定时器让它在某一时刻执行
2014/09/02 Javascript
Windows下用PyCharm和Visual Studio开始Python编程
2015/10/26 Javascript
JS获取input file绝对路径的方法(推荐)
2016/08/02 Javascript
移动端刮刮乐的实现方式(js+HTML5)
2017/03/23 Javascript
axios进阶实践之利用最优雅的方式写ajax请求
2017/12/20 Javascript
JavaScript中Array方法你该知道的正确打开方法
2018/09/11 Javascript
Vue实现根据hash高亮选项卡
2019/05/27 Javascript
vue 子组件watch监听不到prop的解决
2020/08/09 Javascript
[35:55]完美世界DOTA2联赛PWL S3 Rebirth vs CPG 第一场 12.11
2020/12/13 DOTA
python操作MySQL数据库的方法分享
2012/05/29 Python
python写的ARP攻击代码实例
2014/06/04 Python
python中实现控制小数点位数的方法
2019/01/24 Python
使用Python创建简单的HTTP服务器的方法步骤
2019/04/26 Python
Python任意字符串转16, 32, 64进制的方法
2019/06/12 Python
解决pyecharts在jupyter notebook中使用报错问题
2020/04/23 Python
tensorflow之获取tensor的shape作为max_pool的ksize实例
2020/01/04 Python
Python numpy矩阵处理运算工具用法汇总
2020/07/13 Python
matplotlib之pyplot模块坐标轴标签设置使用(xlabel()、ylabel())
2021/02/22 Python
校园自助餐厅的创业计划书
2013/12/26 职场文书
政法学院毕业生求职信
2014/02/28 职场文书
创建市级文明单位实施方案
2014/03/01 职场文书
村级换届选举方案
2014/05/10 职场文书
工地质量标语
2014/06/12 职场文书
国博复兴之路观后感
2015/06/02 职场文书