使用gulp搭建本地服务器并实现模拟ajax


Posted in Javascript onApril 05, 2017

本文主要给大家总结了在工作中可能会用到的小工具,在此记录一下。

可以实现的功能有:

       1. 本地http服务器

       2.页面实时刷新

       3.可以模拟ajax请求

第一步,新建package.json文件。

用到了gulp、gulp-webserver、gulp-livereload

package.json的内容如下:

{
 "name": "localserver",
 "version": "1.0.0",
 "description": "",
 "main": "index.js",
 "scripts": {
 "test": "echo \"Error: no test specified\" && exit 1"
 },
 "author": "",
 "license": "ISC",
 "devDependencies": {
 "gulp": "^3.9.1",
 "gulp-webserver": "^0.9.1",
 "gulp-livereload": "^3.8.1"
 }
}

第二步,在当前目录下执行npm install安装所需的包

第三步,建立目录结构

使用gulp搭建本地服务器并实现模拟ajax

其中,www是站点的根目录,用于放置html/js/css等静态文件,api是用于放置模拟ajax请求的js文件,如test.js。则ajax请求/api/test的时候,返回改文件的内容,是一个json对象。

第四步,编写gulpfile.js

gulpfile.js内容如下:

var url = require('url');
var fs = require('fs');
var path = require('path');

gulp = require('gulp');
livereload = require('gulp-livereload');
webserver = require('gulp-webserver');

//web服务器
gulp.task('webserver', function() {
 gulp.src('./www') // 服务器目录(./代表根目录)
 .pipe(webserver({ // 运行gulp-webserver
 port: 8000, //端口,默认8000
 livereload: true, // 启用LiveReload
 open: true, // 服务器启动时自动打开网页
 directoryListing: {
  enable: true,
  path: './www'
 },
 middleware: function(req, res, next) {
  //mock local data
  var urlObj = url.parse(req.url, true),
  method = req.method;


  if (!urlObj.pathname.match(/^\/api/)) { //不是api开头的数据,直接next
  next();
  return;
  }
  var mockDataFile = path.join(__dirname, urlObj.pathname) + ".js";
  //file exist or not
  fs.access(mockDataFile, fs.F_OK, function(err) {
  if (err) {
   res.setHeader('Content-Type', 'application/json');
   res.end(JSON.stringify({
   "status": "没有找到此文件",
   "notFound": mockDataFile
   }));
   return;
  }
  var data = fs.readFileSync(mockDataFile, 'utf-8');
  res.setHeader('Content-Type', 'application/json');
  res.end(data);
  });
  next();
 },
 proxies: []
 }));
});


// 默认任务
gulp.task('default', ['webserver']);

第五步,执行gulp命令,会自动打开浏览器,在8000端口起了http服务。就可以看到你的页面了。 

为了给大家使用方便,我把建立好的目录和文件放在这里了,你下载后,直接运行npm install,然后gulp就可以了。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
JavaScript 面向对象编程(2) 定义类
May 18 Javascript
JS简单的图片放大缩小的两种方法
Nov 11 Javascript
JavaScript 作用域链解析
Nov 13 Javascript
Jquery中request和request.form和request.querystring的区别
Nov 26 Javascript
JavaScript学习小结(7)之JS RegExp
Nov 29 Javascript
js判断图片加载完成后获取图片实际宽高的方法
Feb 25 Javascript
用JS动态改变表单form里的action值属性的两种方法
May 25 Javascript
ashx文件获取$.ajax()方法发送的数据
May 26 Javascript
微信小程序 数据封装,参数传值等经验分享
Jan 09 Javascript
Node.js pipe实现源码解析
Aug 12 Javascript
深入学习Vue nextTick的用法及原理
Oct 08 Javascript
原生JavaScript实现滑动拖动验证的示例代码
Dec 06 Javascript
Vue.js render方法使用详解
Apr 05 #Javascript
self.attachevent is not a function的解决方法
Apr 04 #Javascript
Vue.js实战之通过监听滚动事件实现动态锚点
Apr 04 #Javascript
Vue.js实战之使用Vuex + axios发送请求详解
Apr 04 #Javascript
Vue.js实战之组件的进阶
Apr 04 #Javascript
关于axios返回空对象的问题解决
Apr 04 #Javascript
jQuery自定义图片上传插件实例代码
Apr 04 #jQuery
You might like
Codeigniter生成Excel文档的简单方法
2014/06/12 PHP
java微信开发之上传下载多媒体文件
2016/06/24 PHP
php文件类型MIME对照表(比较全)
2016/10/07 PHP
CI框架表单验证实例详解
2016/11/21 PHP
thinkPHP5.0框架独立配置与动态配置方法
2017/03/17 PHP
php自定义函数实现统计中文字符串长度的方法小结
2017/04/15 PHP
Yii框架ACF(accessController)简单权限控制操作示例
2019/04/26 PHP
laravel 实现上传图片到本地和前台访问示例
2019/10/21 PHP
二行代码解决全部网页木马
2008/03/28 Javascript
jQuery中的.bind()、.live()和.delegate()之间区别分析
2011/06/08 Javascript
js调用浏览器打印模块实现点击按钮触发自定义函数
2014/03/21 Javascript
JavaScript取得键盘按下方向键是哪个的方法
2015/08/04 Javascript
AngularJS 中的指令实践开发指南(一)
2016/03/20 Javascript
分离与继承的思想实现图片上传后的预览功能:ImageUploadView
2016/04/07 Javascript
javascript html5摇一摇功能的实现
2016/04/19 Javascript
jQuery+ajax简单实现文件上传的方法
2016/06/03 Javascript
JavaScript中object和Object的区别(详解)
2017/02/27 Javascript
vue实现简单表格组件实例详解
2017/04/16 Javascript
bootstrap3使用bootstrap datetimepicker日期插件
2017/05/24 Javascript
nodejs socket服务端和客户端简单通信功能
2017/09/14 NodeJs
Vue实现自定义下拉菜单功能
2018/07/16 Javascript
python字典快速保存于读取的方法
2018/03/23 Python
在PyCharm中三步完成PyPy解释器的配置的方法
2018/10/29 Python
Python3 安装PyQt5及exe打包图文教程
2019/01/08 Python
基于Python的PIL库学习详解
2019/05/10 Python
python列表插入append(), extend(), insert()用法详解
2019/09/14 Python
PyQt5事件处理之定时在控件上显示信息的代码
2020/03/25 Python
python语言的优势是什么
2020/06/17 Python
Python实现打包成库供别的模块调用
2020/07/13 Python
PyCharm+PyQt5+QtDesigner配置详解
2020/08/12 Python
在HTML5 canvas里用卷积核进行图像处理的方法
2018/05/02 HTML / CSS
入党自我鉴定范文
2013/10/04 职场文书
公司年会搞笑主持词
2014/03/24 职场文书
特此通知格式
2015/04/27 职场文书
《卖火柴的小女孩》教学反思
2016/02/19 职场文书
python之基数排序的实现
2021/07/26 Python