利用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 相关文章推荐
根据分辩率调用不同的CSS.
Jan 08 Javascript
Javascript 面试题随笔
Mar 31 Javascript
从面试题学习Javascript 面向对象(创建对象)
Mar 30 Javascript
js如何设置在iframe框架中指定div不显示
Dec 04 Javascript
JavaScript实现模仿桌面窗口的方法
Jul 18 Javascript
jQuery实现form表单元素序列化为json对象的方法
Dec 09 Javascript
js控制TR的显示隐藏
Mar 04 Javascript
AngularJS基础 ng-selected 指令简单示例
Aug 03 Javascript
利用JS判断字符串是否含有数字与特殊字符的方法小结
Nov 25 Javascript
Bootstrap导航条鼠标悬停下拉菜单
Jan 04 Javascript
@ResponseBody 和 @RequestBody 注解的区别
Mar 08 Javascript
webpack教程之webpack.config.js配置文件
Jul 05 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
点图片上一页下一页翻页效果
2008/07/09 Javascript
jquery 应用代码 方便的排序功能
2010/02/06 Javascript
setInterval计时器不准的问题解决方法
2014/05/08 Javascript
javascript的alert box在java中如何显示多行
2014/05/18 Javascript
javascript清空table表格的方法
2015/05/14 Javascript
简介JavaScript中POSITIVE_INFINITY值的使用
2015/06/05 Javascript
nodejs导出excel的方法
2015/06/30 NodeJs
EasyUI在表单提交之前进行验证的实例代码
2016/06/24 Javascript
nodejs个人博客开发第七步 后台登陆
2017/04/12 NodeJs
win系统下nodejs环境安装配置
2017/05/04 NodeJs
Angular 2.x学习教程之结构指令详解
2017/05/25 Javascript
vue.js选中动态绑定的radio的指定项
2017/06/02 Javascript
Express使用html模板的详细代码
2017/09/18 Javascript
VUE 实现滚动监听 导航栏置顶的方法
2018/09/11 Javascript
详解Angular Karma测试的持续集成实践
2019/11/15 Javascript
微信小程序自定义模态弹窗组件详解
2019/12/24 Javascript
vue使用axios实现excel文件下载的功能
2020/07/16 Javascript
JavaScript实现串行请求的示例代码
2020/09/14 Javascript
Python通过90行代码搭建一个音乐搜索工具
2015/07/29 Python
Python文本处理之按行处理大文件的方法
2018/04/09 Python
教你利用Python玩转histogram直方图的五种方法
2018/07/30 Python
django admin组件使用方法详解
2019/07/19 Python
你还在@微信官方?聊聊Python生成你想要的微信头像
2019/09/25 Python
Python接口自动化测试的实现
2020/08/28 Python
利用CSS3实现进度条的两种姿势详解
2017/03/21 HTML / CSS
详解HTML5中的标签
2015/06/19 HTML / CSS
美国隐形眼镜销售网站:ContactsDirect
2017/10/28 全球购物
美国鲜花递送:UrbanStems
2021/01/04 全球购物
C++是不是类型安全的
2014/02/18 面试题
个人求职信范例
2014/01/29 职场文书
经典婚礼主持开场白
2014/03/13 职场文书
材料员岗位职责
2014/03/13 职场文书
员工激励培训演讲稿
2014/09/16 职场文书
个人先进事迹材料
2014/12/29 职场文书
工程质量保证书
2015/05/09 职场文书
MySQL如何构建数据表索引
2021/05/13 MySQL