使用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 相关文章推荐
setAttribute 与 class冲突解决
Feb 17 Javascript
微信小程序 picker-view 组件详解及简单实例
Jan 10 Javascript
基于AngularJS实现表单验证功能
Jul 28 Javascript
JS解析url查询参数的简单代码
Aug 06 Javascript
基于ES6作用域和解构赋值详解
Nov 03 Javascript
Vue组件开发技巧总结
Mar 04 Javascript
Vue.js 动态为img的src赋值方法
Mar 14 Javascript
微信小程序自定义prompt组件步骤详解
Jun 12 Javascript
js canvas画布实现高斯模糊效果
Nov 27 Javascript
vue 的 solt 子组件过滤过程解析
Sep 07 Javascript
微信小程序实现滑动翻页效果(完整代码)
Dec 06 Javascript
vue+django实现下载文件的示例
Mar 24 Vue.js
如何为你的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
php5中date()得出的时间为什么不是当前时间的解决方法
2008/06/30 PHP
探讨如何在PHP开启gzip页面压缩实例
2013/06/09 PHP
ecshop实现smtp发送邮件
2015/02/03 PHP
PHP实现用户登录的案例代码
2018/05/10 PHP
ie 调试javascript的工具
2009/04/29 Javascript
Javascript Global对象
2009/08/13 Javascript
jQuery的Ajax时无响应数据的解决方法
2010/05/25 Javascript
javascript textContent与innerText的异同分析
2010/10/22 Javascript
jquery 实现checkbox全选,反选,全不选等功能代码(奇数)
2012/10/24 Javascript
分享一个我自己写的ToolTip提示插件(附源码)
2013/01/20 Javascript
JavaScript中的Math 使用介绍
2014/04/21 Javascript
深入理解javascript原型链和继承
2014/09/23 Javascript
实例解析jQuery中如何取消后续执行内容
2016/12/01 Javascript
webpack教程之webpack.config.js配置文件
2017/07/05 Javascript
jQuery实现的简单前端搜索功能示例
2017/10/28 jQuery
Angular中innerHTML标签的样式不起作用的原因解析
2019/06/18 Javascript
浅谈Vue项目骨架屏注入实践
2019/08/05 Javascript
详解Python中的__init__和__new__
2014/03/12 Python
python实现的阳历转阴历(农历)算法
2014/04/25 Python
Python 字符串操作(string替换、删除、截取、复制、连接、比较、查找、包含、大小写转换、分割等)
2018/03/19 Python
Python Requests模拟登录实现图书馆座位自动预约
2018/04/27 Python
Python实现的大数据分析操作系统日志功能示例
2019/02/11 Python
Python实现字符串匹配的KMP算法
2019/04/04 Python
Python 控制终端输出文字的实例
2019/07/12 Python
Opencv+Python识别PCB板图片的步骤
2021/01/07 Python
非凡女性奢华谦虚风格:The Modist
2017/10/28 全球购物
数控技术专业推荐信
2013/11/01 职场文书
人事任命书范文
2014/06/04 职场文书
感谢信的格式
2015/01/21 职场文书
机修车间主任岗位职责
2015/04/08 职场文书
办公室年度工作总结2015
2015/05/21 职场文书
婚礼双方父亲致辞
2015/07/27 职场文书
python基础学习之递归函数知识总结
2021/05/26 Python
vue基于Teleport实现Modal组件
2021/05/31 Vue.js
JavaScript实现优先级队列
2021/12/06 Javascript
Nginx的gzip相关介绍
2022/05/11 Servers