利用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 相关文章推荐
JavaScript中null与undefined分析
Jul 25 Javascript
jcarousellite.js 基于Jquery的图片无缝滚动插件
Dec 30 Javascript
Javascript无阻塞加载具体方式
Jun 28 Javascript
兼容最新firefox、chrome和IE的javascript图片预览实现代码
Aug 08 Javascript
JavaScript将Web页面内容导出到Word及Excel的方法
Feb 13 Javascript
Javascript进制转换实例分析
May 14 Javascript
jQuery中$(function() {});问题详解
Aug 10 Javascript
vue.js将unix时间戳转换为自定义时间格式
Jan 03 Javascript
完美解决node.js中使用https请求报CERT_UNTRUSTED的问题
Jan 08 Javascript
vue 纯js监听滚动条到底部的实例讲解
Sep 03 Javascript
微信小程序MUI侧滑导航菜单示例(Popup弹出式,左侧滑动,右侧不动)
Jan 23 Javascript
jQuery子选择器与可见性选择器实例分析
Jun 28 jQuery
详谈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 基于文件头的文件类型验证类函数
2012/05/01 PHP
Yii实现多按钮保存与提交的方法
2014/12/03 PHP
PHP生成随机数的方法实例分析
2015/01/22 PHP
php投票系统之增加与删除投票(管理员篇)
2016/07/01 PHP
nginx下安装php7+php5
2016/07/31 PHP
css值转换成数值请抛弃parseInt
2011/10/24 Javascript
js中事件的处理与浏览器对象示例介绍
2013/11/29 Javascript
JS实现图片平面旋转的方法
2016/03/01 Javascript
AngularJS模仿Form表单提交的实现代码
2016/12/08 Javascript
js中小数向上取整数,向下取整数,四舍五入取整数的实现(必看篇)
2017/02/13 Javascript
Bootstrap导航中表单简单实现代码
2017/03/06 Javascript
详解vue中引入stylus及报错解决方法
2017/09/22 Javascript
React/Redux应用使用Async/Await的方法
2017/11/16 Javascript
Vue的移动端多图上传插件vue-easy-uploader的示例代码
2017/11/27 Javascript
微信小程序实现图片上传放大预览删除代码
2020/06/28 Javascript
详解Vue+axios+Node+express实现文件上传(用户头像上传)
2018/08/10 Javascript
vue使用原生js实现滚动页面跟踪导航高亮的示例代码
2018/10/25 Javascript
详解项目升级到vue-cli3的正确姿势
2019/01/28 Javascript
vue中使用rem布局代码详解
2019/10/30 Javascript
[51:06]2018DOTA2亚洲邀请赛3月29日 小组赛A组 KG VS Liquid
2018/03/30 DOTA
Python Web框架Flask信号机制(signals)介绍
2015/01/01 Python
Python实现统计英文单词个数及字符串分割代码
2015/05/28 Python
python ddt数据驱动最简实例代码
2019/02/22 Python
Python多进程方式抓取基金网站内容的方法分析
2019/06/03 Python
python实现批量修改文件名
2020/03/23 Python
Python基于gevent实现高并发代码实例
2020/05/15 Python
希尔顿酒店官方网站:Hilton Hotels
2017/06/01 全球购物
《跨越百年的美丽》教学反思
2014/02/11 职场文书
2014年维稳工作总结
2014/11/18 职场文书
爱的承诺书
2015/01/20 职场文书
委托函范文
2015/01/29 职场文书
大学生团支书竞选稿
2015/11/21 职场文书
2016年小学教师师德承诺书
2016/03/25 职场文书
一次SQL查询优化原理分析(900W+数据从17s到300ms)
2022/06/10 SQL Server
Redis Lua脚本实现ip限流示例
2022/07/15 Redis
Apache SkyWalking 监控 MySQL Server 实战解析
2022/09/23 Servers