利用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 相关文章推荐
最新28个很棒的jQuery 教程
May 28 Javascript
js中根据字数截取字符串,不能截断url
Jan 12 Javascript
40个新鲜出炉的jQuery 插件和免费教程[上]
Jul 24 Javascript
JS替换文本域内的回车示例
Feb 18 Javascript
基于JS分页控件实现简单美观仿淘宝分页按钮效果
Nov 07 Javascript
原生JS获取元素集合的子元素宽度实例
Dec 14 Javascript
H5图片压缩与上传实例
Apr 21 Javascript
原生JavaScript实现的简单省市县三级联动功能示例
May 27 Javascript
详解Angular2组件之间如何通信
Jun 22 Javascript
vue 通过下拉框组件学习vue中的父子通讯
Dec 19 Javascript
Vue的路由动态重定向和导航守卫实例
Mar 17 Javascript
深入浅出理解JavaScript高级定时器原理与用法
Aug 02 Javascript
详谈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
JS 网站性能优化笔记
2011/05/24 PHP
php上传图片存入数据库示例分享
2014/03/11 PHP
ThinkPHP视图查询详解
2014/06/30 PHP
php检查日期函数checkdate用法实例
2015/03/19 PHP
PHP针对多用户实现更换头像功能
2016/09/04 PHP
thinkphp框架page类与bootstrap分页(美化)
2017/06/25 PHP
JavaScript定义类或函数的几种方式小结
2011/01/09 Javascript
Jquery实现列表(隔行换色,全选,鼠标滑过当前行)效果实例
2013/06/09 Javascript
jQuery实现仿QQ空间装扮预览图片的鼠标提示效果代码
2015/10/30 Javascript
js实现接收表单的值并将值拼在表单action后面的方法
2015/11/23 Javascript
JavaScript中iframe实现局部刷新的几种方法汇总
2016/01/06 Javascript
JavaScript中省略元素对数组长度的影响
2016/10/26 Javascript
css和js实现弹出登录居中界面完整代码
2017/11/26 Javascript
Vue.js通用应用框架-Nuxt.js的上手教程
2017/12/25 Javascript
Webpack打包字体font-awesome的方法示例
2018/04/26 Javascript
浅谈vue项目,访问路径#号的问题
2020/08/14 Javascript
[03:21]【TI9纪实】Old Boys
2019/08/23 DOTA
python实现的udp协议Server和Client代码实例
2014/06/04 Python
浅析Python中的多重继承
2015/04/28 Python
Python装饰器基础详解
2016/03/09 Python
Python使用logging结合decorator模式实现优化日志输出的方法
2016/04/16 Python
python append、extend与insert的区别
2016/10/13 Python
python实现广度优先搜索过程解析
2019/10/19 Python
Python run()函数和start()函数的比较和差别介绍
2020/05/03 Python
python 元组的使用方法
2020/06/09 Python
携程英文网站:Trip.com
2017/02/07 全球购物
印度领先的眼镜电子商务网站:Lenskart
2019/12/16 全球购物
美国球迷装备的第一来源:FOCO
2020/07/03 全球购物
会计实习生工作总结的自我评价
2013/10/07 职场文书
教师实习自我鉴定
2013/12/11 职场文书
新护士岗前培训制度
2014/02/02 职场文书
2014大学班主任工作总结
2014/11/08 职场文书
2015年世界无烟日演讲稿
2015/03/18 职场文书
公司宣传语大全
2015/07/13 职场文书
多人股份制合作协议书
2016/03/19 职场文书
Redis特殊数据类型Geospatial地理空间
2022/06/01 Redis