利用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 阴影插件代码分享
Jan 09 Javascript
js将iframe中控件的值传到主页面控件中的实现方法
Mar 11 Javascript
JS获取URL中参数值(QueryString)的4种方法分享
Apr 12 Javascript
JavaScript中的方法重载实例
Mar 16 Javascript
js控住DOM实现发布微博效果
Aug 30 Javascript
jQuery如何防止Ajax重复提交
Oct 14 Javascript
javascript另类方法实现htmlencode()与htmldecode()函数实例分析
Nov 17 Javascript
javascript prototype原型详解(比较基础)
Dec 26 Javascript
微信小程序实现tab切换效果
Nov 21 Javascript
详解Vue CLI3配置之filenameHashing使用和源码设计使用和源码设计
Aug 31 Javascript
关于JavaScript 数组你应该知道的事情(推荐)
Apr 10 Javascript
如何在vue中使用HTML 5 拖放API
Jan 14 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中spl_autoload详解
2014/10/17 PHP
Symfony核心类概述
2016/03/17 PHP
深入理解PHP之源码目录结构与功能说明
2016/06/01 PHP
php中文语义分析实现方法示例
2019/09/28 PHP
Firebug 字幕文件JSON地址获取代码
2009/10/28 Javascript
jQuery学习笔记之 Ajax操作篇(二) - 数据传递
2014/06/23 Javascript
javascript学习笔记(一)基础知识
2014/09/30 Javascript
浅谈javascript对象模型和function对象
2014/12/26 Javascript
ThinkJS中如何使用MongoDB的CURD操作
2016/12/13 Javascript
过期软件破解办法实例详解
2017/01/04 Javascript
微信小程序开发之Tabbar实例详解
2017/01/09 Javascript
谈谈JavaScript数组常用方法总结
2017/01/24 Javascript
jquery基于layui实现二级联动下拉选择(省份城市选择)
2017/06/20 jQuery
vue-resource调用promise取数据方式详解
2017/07/21 Javascript
js定时器实现倒计时效果
2017/11/05 Javascript
jQuery进阶实践之利用最优雅的方式如何写ajax请求
2017/12/20 jQuery
在微信小程序里使用watch和computed的方法
2018/08/02 Javascript
移动端滑动切换组件封装 vue-swiper-router实例详解
2018/11/25 Javascript
Node.js 进程平滑离场剖析小结
2019/01/24 Javascript
Python 文件操作技巧(File operation) 实例代码分析
2008/08/11 Python
Python 两个列表的差集、并集和交集实现代码
2016/09/21 Python
Python实现读取文件最后n行的方法
2017/02/23 Python
python实现12306抢票及自动邮件发送提醒付款功能
2018/03/08 Python
Python读写docx文件的方法
2018/05/08 Python
Flask-Mail用法实例分析
2018/07/21 Python
Python编写单元测试代码实例
2020/09/10 Python
原装进口全世界:天猫国际
2016/08/03 全球购物
美国最大的农村生活方式零售店:Tractor Supply Company(TSC)
2017/05/15 全球购物
Notino希腊:购买香水和美容产品
2019/07/25 全球购物
如何用Java实现列出某个目录下的所有子目录
2015/07/20 面试题
解释下面关于J2EE的名词
2013/11/15 面试题
土木工程实习生自我鉴定
2013/09/19 职场文书
2014年入党积极分子党课学习心得体会模板
2014/04/03 职场文书
租车协议书范本
2014/04/22 职场文书
七一活动主持词
2015/06/29 职场文书
2016高考寄语或鼓励的话语
2015/12/04 职场文书