利用Node.js+Koa框架实现前后端交互的方法


Posted in Javascript onFebruary 27, 2017

前言

对于一个前端工程师来说不仅仅要会前端的内容,后端的技术也需要熟练掌握。今天我就要通过一个案例来描述一下前端是如何和后端进行数据交互的。

koa 是由 Express 原班人马打造的,致力于成为一个更小、更富有表现力、更健壮的 Web 框架。使用 koa 编写 web 应用,通过组合不同的 generator,可以免除重复繁琐的回调函数嵌套,并极大地提升错误处理的效率。koa 不在内核方法中绑定任何中间件,它仅仅提供了一个轻量优雅的函数库,使得编写 Web 应用变得得心应手。

准备工作

首先,我们的服务器需要部署好Nodejs的环境,这里我用Nodejs在windows下的本地服务器来做演示。

部署NodeJS环境请看:《Windows系统下安装Node.js的步骤图文详解》这篇文章。

对Koa框架不熟悉的朋友可以参考这篇文章:Node.js的Koa框架上手及MySQL操作指南

方法如下

环境部署好之后我们需要创建一个工程的目录,并且在目录中通过npm来安装Koa框架以及一些用到的依赖库。

下图是我完成后的目录结构。

利用Node.js+Koa框架实现前后端交互的方法

cd到你的工程目录,然后执行npm koa目录里就会多出node_modules这样一个文件夹,里边存放用到的一些依赖库。

利用Node.js+Koa框架实现前后端交互的方法

接下来我们创建一个app.js文件,用来设置访问服务器时用到的路由,代码如下

var koa = require('koa');
var controller = require('koa-route');//需要通过npm来添加此依赖
var app = koa();

var service = require('./service/WebAppService.js');//引用WebAppService.js

/*设置路由*/
app.use(controller.get('/ajax/search',function*(){
 this.set('Cache-Control','no-cache');
 this.set('Access-Control-Allow-Origin','*');
 var querystring = require('querystring');
 var params = querystring.parse(this.req._parsedUrl.query);
 var key = params.key;
 var start = params.start;
 var end = params.end;
 this.body = yield service.get_search_data(key,start,end);
}));

app.listen(3001);
console.log('Koa server is started');

node_modules文件夹内默认是没有koa-route这个依赖的,需要通过npm koa-route来安装

然后我们需要在service目录下创建一个WebAppService.js文件,用来请求接口,代码如下

var fs = require('fs');
exports.get_search_data = function(key,start,end){
 return function(cb){

  var http = require('http');
  var qs = require('querystring');
  var data = {
   key:key,
   start:start,
   end:end
  };

  /*请求MobAPI里的火车票查询接口*/
  var content = qs.stringify(data);
  var http_request = {
   hostname:'apicloud.mob.com',
   port:80,
   path:'/train/tickets/queryByStationToStation?' + content,
   method: 'GET'
  };

  var req = http.request(http_request,function(response){
   var body = '';
   response.setEncoding('utf-8');
   response.on('data',function(chunk){
    body += chunk;
   });
   response.on('end',function(){
    cb(null,body);
   });
  });

  req.end();
 }
}

这样实际是做了一个接口的转接,我们不仅可以请求本地的接口而且还可以请求第三方接口,避免了跨域请求时浏览器阻断请求。

接下来我们通过命令来开启服务,终端输入node app.js

利用Node.js+Koa框架实现前后端交互的方法

然后在浏览器请求接口 http://localhost:3001/ajax/search?key=520520test&start=北京&end=上海

利用Node.js+Koa框架实现前后端交互的方法

这样我们就实现了接口请求,并获得json数据,感兴趣的朋友可以看看下面文章,下面的文章会将这些从后端获得的数据以一种更加直观的方式呈现在界面上,并运用Vue.js框架制作一个火车票查询系统。

请看《利用Vue.js框架实现火车票查询系统(附源码)》

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
jQuery Study Notes学习笔记 (二)
Aug 04 Javascript
关于JavaScript的with 语句的使用方法
May 09 Javascript
刷新页面的几种方法小结(JS,ASP.NET)
Jan 07 Javascript
javascript单页面手势滑屏切换原理详解
Mar 21 Javascript
Bootstrap CSS组件之分页(pagination)和翻页(pager)
Dec 17 Javascript
Bootstrap框架安装使用详解
Jan 21 Javascript
微信小程序开发animation心跳动画效果
Aug 16 Javascript
vue+socket.io+express+mongodb 实现简易多房间在线群聊示例
Oct 21 Javascript
在微信小程序中渲染HTML内容3种解决方案及分析与问题解决
Jan 12 Javascript
vue实现两个区域滚动条同步滚动
Dec 13 Vue.js
Javascript设计模式之原型模式详细
Oct 05 Javascript
vue使用echarts实现折线图
Mar 21 Vue.js
详谈js中数组(array)和对象(object)的区别
Feb 27 #Javascript
JS区分Object与Aarry的六种方法总结
Feb 27 #Javascript
利用Vue.js框架实现火车票查询系统(附源码)
Feb 27 #Javascript
JavaScript中object和Object的区别(详解)
Feb 27 #Javascript
jQuery使用DataTable实现删除数据后重新加载功能
Feb 27 #Javascript
使用Bootstrap + Vue.js实现添加删除数据示例
Feb 27 #Javascript
关于Sequelize连接查询时inlude中model和association的区别详解
Feb 27 #Javascript
You might like
php session 预定义数组
2009/03/16 PHP
php使用post数组的键值创建同名变量并赋值的方法
2015/04/03 PHP
PHP中的随机性 你觉得自己幸运吗?
2016/01/22 PHP
深入浅出讲解:php的socket通信原理
2016/12/03 PHP
PHP时间函数使用详解
2019/03/21 PHP
Laravel统计一段时间间隔的数据方法
2019/10/09 PHP
laravel 解决crontab不执行的问题
2019/10/22 PHP
dojo 之基础篇
2007/03/24 Javascript
JQuery切换显示的效果实例代码
2013/02/27 Javascript
js open() 与showModalDialog()方法使用介绍
2013/09/10 Javascript
Eclipse去除js(JavaScript)验证错误
2014/02/11 Javascript
JQuery中$(document)是什么意思有什么作用
2014/07/21 Javascript
jQuery中width()方法用法实例
2014/12/24 Javascript
JavaScript 事件入门知识
2015/04/13 Javascript
JS+DIV+CSS实现仿表单下拉列表效果
2015/08/18 Javascript
jquery表格datatables实例解析 直接加载和延迟加载
2016/08/12 Javascript
jQuery列表检索功能实现代码
2017/07/17 jQuery
vue不通过路由直接获取url中参数的方法示例
2017/08/24 Javascript
详解react-router4 异步加载路由两种方法
2017/09/12 Javascript
Redux实现组合计数器的示例代码
2018/07/04 Javascript
Vue使用虚拟dom进行渲染view的方法
2019/12/26 Javascript
JavaScript内置对象之Array的使用小结
2020/05/12 Javascript
对numpy中数组元素的统一赋值实例
2018/04/04 Python
Python爬虫beautifulsoup4常用的解析方法总结
2019/02/25 Python
python os模块常用的29种方法使用详解
2020/06/02 Python
分享一个python的aes加密代码
2020/12/22 Python
德国百年厨具品牌WMF美国站:WMF美国
2016/09/12 全球购物
世界知名接发和假发品牌:Poze Hair
2017/03/08 全球购物
英国天然保健品网站:Simply Supplements
2017/03/22 全球购物
Python面试题:Python里面如何生成随机数
2015/03/12 面试题
运动会入场式解说词
2014/02/18 职场文书
初中生庆国庆演讲稿范文2014
2014/09/25 职场文书
乡镇民主生活会发言材料
2014/10/20 职场文书
收入及婚姻状况证明
2014/11/20 职场文书
优秀教师先进事迹材料
2014/12/15 职场文书
MYSQL 运算符总结
2021/11/11 MySQL