利用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实现后台左侧菜单点击上下滑动显示
Apr 11 Javascript
jQuery 淡出一个图像到另一个图像的实现代码
Jun 12 Javascript
jquerydom对象的事件隐藏显示和对象数组示例
Dec 10 Javascript
JS数组排序技巧汇总(冒泡、sort、快速、希尔等排序)
Nov 24 Javascript
详解AngularJS 模态对话框
Apr 07 Javascript
JavaScript编写点击查看大图的页面半透明遮罩层效果实例
May 09 Javascript
微信小程序 生命周期和页面的生命周期详细介绍
Jan 19 Javascript
bootstrap模态框示例代码分享
May 17 Javascript
JavaScript实现开关等效果
Sep 08 Javascript
vue移动端微信授权登录插件封装的实例
Aug 28 Javascript
JS+php后台实现文件上传功能详解
Mar 02 Javascript
详解JavaScript的数据类型以及数据类型的转换
Apr 20 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
PHILIPS D1835/D1875的电路分析与打理
2021/03/02 无线电
PHP数组对比函数,存在交集则返回真,否则返回假
2011/02/03 PHP
Thinkphp中Create方法深入探究
2014/06/16 PHP
php使用fgetcsv读取csv文件出现乱码的解决方法
2014/11/08 PHP
PHP-FPM之Chroot执行环境详解
2015/08/03 PHP
浅析ThinkPHP缓存之快速缓存(F方法)和动态缓存(S方法)(日常整理)
2015/10/26 PHP
静态html文件执行php语句的方法(推荐)
2016/11/21 PHP
jQuery的一些注意
2006/12/06 Javascript
S2SH整合JQuery+Ajax实现登录验证功能实现代码
2013/01/30 Javascript
自定义jQuery选项卡插件实例
2013/03/27 Javascript
A标签触发onclick事件而不跳转的多种解决方法
2013/06/27 Javascript
JS、CSS以及img对DOMContentLoaded事件的影响
2014/08/12 Javascript
jQuery实现Tab选项卡切换效果简单演示
2015/11/23 Javascript
JavaScript知识点整理
2015/12/09 Javascript
React操作真实DOM实现动态吸底部的示例
2017/10/23 Javascript
jQuery+ajax读取json数据并按照价格排序示例
2018/03/28 jQuery
vue和webpack打包项目相对路径修改的方法
2018/06/15 Javascript
element el-input directive数字进行控制
2018/10/11 Javascript
vue实现五子棋游戏
2020/05/28 Javascript
echarts实现晶体球面投影的实例教程
2020/10/10 Javascript
全面解析Python的While循环语句的使用方法
2015/10/13 Python
关于Python中Inf与Nan的判断问题详解
2017/02/08 Python
Python编程之gui程序实现简单文件浏览器代码
2017/12/08 Python
python sqlite的Row对象操作示例
2019/09/11 Python
Pytorch 计算误判率,计算准确率,计算召回率的例子
2020/01/18 Python
使用CSS实现弹性视频html5案例实践
2012/12/26 HTML / CSS
印度服装购物网站:Limeroad
2018/09/26 全球购物
Nisbets法国:英国最大的厨房和餐饮设备供应商
2019/03/18 全球购物
小学国庆节活动方案
2014/02/11 职场文书
大学生创业项目方案
2014/03/08 职场文书
建筑安全员岗位职责
2014/03/13 职场文书
鉴定评语大全
2014/05/05 职场文书
先进事迹演讲稿
2014/09/01 职场文书
Python import模块的缓存问题解决方案
2021/06/02 Python
详解Flutter和Dart取消Future的三种方法
2022/04/07 Java/Android
Apache Hudi 加速传统的批处理模式
2022/04/24 Servers