使用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 UI Dialog 创建友好的弹出对话框实现代码
Apr 12 Javascript
jquery教程ajax请求json数据示例
Jan 13 Javascript
jquery 实现滚动条下拉时无限加载的简单实例
Jun 01 Javascript
Canvas 制作动态进度加载水球详解及实例代码
Dec 09 Javascript
Angular4编程之表单响应功能示例
Dec 13 Javascript
浅谈Node.js爬虫之网页请求模块
Jan 11 Javascript
Vue路由切换时的左滑和右滑效果示例
May 29 Javascript
vue2中引用及使用 better-scroll的方法详解
Nov 15 Javascript
微信小程序实现点击空白隐藏的方法示例
Aug 13 Javascript
vue-cli点击实现全屏功能
Mar 07 Javascript
通过js随机函数Math.random实现乱序
May 19 Javascript
vue打开子组件弹窗都刷新功能的实现
Sep 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
Windows下的PHP5.0详解
2006/11/18 PHP
Smarty结合Ajax实现无刷新留言本实例
2007/01/02 PHP
php下使用strpos需要注意 === 运算符
2010/07/17 PHP
php实现的简易扫雷游戏实例
2015/07/09 PHP
PHP parse_ini_file函数的应用与扩展操作示例
2019/01/07 PHP
jquery获取table中的某行全部td的内容方法
2013/03/08 Javascript
JavaScript实现复制功能各浏览器支持情况实测
2013/07/18 Javascript
浏览器兼容console对象的简要解决方案分享
2013/10/24 Javascript
JavaScript Serializer序列化时间处理示例
2014/07/31 Javascript
浅谈JavaScript中null和undefined
2015/07/09 Javascript
基于jquery fly插件实现加入购物车抛物线动画效果
2016/04/05 Javascript
js获取客户端操作系统类型的方法【测试可用】
2016/05/27 Javascript
jQuery使用each方法与for语句遍历数组示例
2016/06/16 Javascript
JS声明对象时属性名加引号与不加引号的问题及解决方法
2018/02/16 Javascript
vue better scroll 无法滚动的解决方法
2018/06/07 Javascript
jQuery实现提交表单时不提交隐藏div中input的方法
2019/10/08 jQuery
浅谈Vue SSR中的Bundle的具有使用
2019/11/21 Javascript
JavaScript canvas动画实现时钟效果
2020/02/10 Javascript
[03:42]2018完美盛典-《加冕》
2018/12/16 DOTA
python的id()函数解密过程
2012/12/25 Python
在Python中操作时间之tzset()方法的使用教程
2015/05/22 Python
对python字典过滤条件的实例详解
2019/01/22 Python
python tkinter canvas 显示图片的示例
2019/06/13 Python
python画图——实现在图上标注上具体数值的方法
2019/07/08 Python
Spring Cloud Feign高级应用实例详解
2019/12/10 Python
将不规则的Python多维数组拉平到一维的方法实现
2021/01/11 Python
详解CSS3原生支持div铺满浏览器的方法
2018/08/30 HTML / CSS
大学生职业生涯规划书汇总
2014/03/20 职场文书
数学高效课堂实施方案
2014/03/29 职场文书
晚会开幕词
2015/01/28 职场文书
公诉意见书范文
2015/06/05 职场文书
护理培训心得体会
2016/01/22 职场文书
基于Go Int转string几种方式性能测试
2021/04/28 Golang
Pytorch 如何加速Dataloader提升数据读取速度
2021/05/28 Python
Java网络编程之UDP实现原理解析
2021/09/04 Java/Android
Java Spring 控制反转(IOC)容器详解
2021/10/05 Java/Android