使用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选择器的年代 不了解它们的性能,行吗
Jun 18 Javascript
Jquery为单选框checkbox绑定单击click事件
Dec 18 Javascript
JavaScript实现N皇后问题算法谜题解答
Dec 29 Javascript
基于jquery实现日历签到功能
Sep 11 Javascript
实践中学习AngularJS表单
Mar 21 Javascript
vue.js国际化 vue-i18n插件的使用详解
Jul 07 Javascript
原生js实现仿window10系统日历效果的实例
Oct 31 Javascript
微信小程序实现倒计时调用相机自动拍照功能
Jun 10 Javascript
VUE中使用MUI方法
Feb 12 Javascript
Javascript和jquery在selenium的使用过程
Oct 31 jQuery
详解微信小程序工程化探索之webpack实战
Apr 20 Javascript
Vue实现PC端靠边悬浮球的代码
May 09 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设计模式 Composite (组合模式)
2011/06/26 PHP
cakephp打印sql语句的方法
2015/02/13 PHP
php使用array_search函数实现数组查找的方法
2015/06/12 PHP
几个优化WordPress中JavaScript加载体验的插件介绍
2015/12/17 PHP
PHP生成随机字符串实例代码(字母+数字)
2019/09/11 PHP
laravel-admin表单提交隐藏一些数据,回调时获取数据的方法
2019/10/08 PHP
laravel 5.3 单用户登录简单实现方法
2019/10/14 PHP
个人总结的一些关于String、Function、Array的属性和用法
2007/01/10 Javascript
学习YUI.Ext第七日-View&amp;JSONView Part Two-一个画室网站的案例
2007/03/10 Javascript
javascript 计算两个整数的百分比值
2009/12/26 Javascript
JS+css 图片自动缩放自适应大小
2013/08/08 Javascript
jQuery手指滑动轮播效果
2016/12/22 Javascript
Angular组件化管理实现方法分析
2017/03/17 Javascript
JS闭包用法实例分析
2017/03/27 Javascript
推荐三款不错的图片压缩上传插件(webuploader、localResizeIMG4、LUploader)
2017/04/21 Javascript
基于jQuery的左滑出现删除按钮的示例
2017/08/29 jQuery
微信小程序实现全国机场索引列表
2018/01/31 Javascript
vue项目首屏打开速度慢的解决方法
2019/03/31 Javascript
详解微信小程序开发(项目从零开始)
2019/06/06 Javascript
vue 框架下自定义滚动条(easyscroll)实现方法
2019/08/29 Javascript
微信小程序中的上拉、下拉菜单功能
2020/03/13 Javascript
[00:56]2014DOTA2国际邀请赛 DK、iG 赛前探访
2014/07/10 DOTA
Django中使用group_by的方法
2015/05/26 Python
python实现给数组按片赋值的方法
2015/07/28 Python
python 3.5实现检测路由器流量并写入txt的方法实例
2017/12/17 Python
Python Sphinx使用实例及问题解决
2020/01/17 Python
python实现随机加减法生成器
2020/02/24 Python
Python WebSocket长连接心跳与短连接的示例
2020/11/24 Python
OpenCV+Python3.5 简易手势识别的实现
2020/12/21 Python
世界经理人咨询有限公司面试
2014/09/23 面试题
英文版区域经理求职信
2013/10/23 职场文书
个人股份转让协议书范本
2014/10/26 职场文书
个人借款协议书范本
2014/11/17 职场文书
中考学习决心书
2015/02/04 职场文书
银行安全保卫工作总结
2015/08/10 职场文书
python引入其他文件夹下的py文件具体方法
2021/05/23 Python