利用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 相关文章推荐
js弹出的对话窗口永远保持居中显示
Dec 15 Javascript
jquery自定义函数的多种方法
Jan 09 Javascript
在JS数组特定索引处指定位置插入元素的技巧
Aug 24 Javascript
跟我学习javascript的for循环和for...in循环
Nov 18 Javascript
基于JavaScript实现定时跳转到指定页面
Jan 01 Javascript
jQuery插件AjaxFileUpload实现ajax文件上传
May 05 Javascript
原生javascript实现的ajax异步封装功能示例
Nov 03 Javascript
JAVA Web实时消息后台服务器推送技术---GoEasy
Nov 04 Javascript
JavaScript hasOwnProperty() 函数实例详解
Aug 04 Javascript
JS 使用 window对象的print方法实现分页打印功能
May 16 Javascript
JS开发 富文本编辑器TinyMCE详解
Jul 19 Javascript
JS数组方法push()、pop()用法实例分析
Jan 18 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
PHP脚本的10个技巧(2)
2006/10/09 PHP
关于php操作mysql执行数据库查询的一些常用操作汇总
2013/06/24 PHP
php实现的click captcha点击验证码类实例
2014/09/23 PHP
PHP实现更改hosts文件的方法示例
2017/08/08 PHP
JavaScript 直接操作本地文件的实现代码
2009/12/01 Javascript
Extjs学习笔记之一 初识Extjs之MessageBox
2010/01/07 Javascript
JS+CSS 制作的超级简单的下拉菜单附图
2013/11/22 Javascript
JavaScript实现三阶幻方算法谜题解答
2014/12/29 Javascript
jquery使用slideDown实现模块缓慢拉出效果的方法
2015/03/27 Javascript
cocos2dx骨骼动画Armature源码剖析(三)
2015/09/08 Javascript
javascript生成随机数方法汇总
2015/11/12 Javascript
关于js二维数组和多维数组的定义声明(详解)
2016/10/02 Javascript
JS实现数组按升序及降序排列的方法
2017/04/26 Javascript
原生JS 购物车及购物页面的cookie使用方法
2017/08/21 Javascript
vue项目base64字符串转图片的实现代码
2018/07/13 Javascript
layui获取多选框中的值方法
2018/08/15 Javascript
在vue中获取微信支付code及code被占用问题的解决方法
2019/04/16 Javascript
Javascript通过控制类名更改样式
2019/05/24 Javascript
原生js实现针对Dom节点的CRUD操作示例
2019/08/26 Javascript
Vue数字输入框组件使用方法详解
2020/02/10 Javascript
Python的Flask框架中SQLAlchemy使用时的乱码问题解决
2015/11/07 Python
python利用selenium进行浏览器爬虫
2019/04/25 Python
关于Flask项目无法使用公网IP访问的解决方式
2019/11/19 Python
使用sublime text3搭建Python编辑环境的实现
2021/01/12 Python
浅析python字符串前加r、f、u、l 的区别
2021/01/24 Python
世界著名的顶级牛排:Omaha Steak(奥马哈牛排)
2016/09/20 全球购物
一道写SQL的面试题和答案
2013/11/19 面试题
秋季运动会活动方案
2014/02/05 职场文书
应届中专生自荐书范文
2014/02/13 职场文书
大学生学习2014年全国两会心得体会
2014/03/12 职场文书
小学生安全演讲稿
2014/04/25 职场文书
监察局领导班子四风问题整改措施思想汇报
2014/10/05 职场文书
财政局党的群众路线教育实践活动剖析材料
2014/10/13 职场文书
2015年初一班主任工作总结
2015/05/13 职场文书
活着观后感
2015/06/03 职场文书
nginx sticky实现基于cookie负载均衡示例详解
2022/12/24 Servers