这篇就先暂停下上篇博客--你画我猜的进度,因为在做这个游戏的时候,想采用最新的ng2技术,奈何坑是一片又一片,这边就先介绍下环境部署和填坑史

既然要用ng2,首先要拿到资源,我这边用的是angularJs2 beta版的,网上的资源有两种,一个是文件全压缩版的.min.js版的另一个就是一大堆乱七八糟的js文件,主要是ng2已经完全采用TypeScript,加之对es6的支持,所以需要引入一大堆兼容,编译文件

这边刚好特别手欠想学学gulp,于是开搞配置gulp环境,压缩所有的js文件成一个min.js文件

var gulp = require("gulp"),
concat = require("gulp-concat"),
uglify = require("gulp-uglify"); gulp.task("default",function(){
return gulp.src([
"src/angular2-polyfills.js",
"src/system.js",
"src/typescript.js",
"src/Rx.js",
"src/angular2.dev.js",
"src/http.dev.js",
"src/router.dev.js",
"src/tsloader.js",
"src/system.config.js"
])
.pipe(concat("angular2.beta.stack.min.js"))
.pipe(uglify())
.pipe(gulp.dest("dist"));
});

玩完gulp,又把grunt玩了一遍,不得不说事物必有其存在的道理,丰富的库支持给了grunt巨大的使用市场,而gulp的语法精简,学习周期也大大缩短使其拥有更大的前景,啧啧,用完就两个字,爽!

碎碎念完,开始说说express+io.socket配置,socket.io配置就不多说了,在上一篇你画我猜讲的很清楚了,传送门,这边我之所以引入express模块的原因,只有一个:路由!!

因为node配置非常底层,路由还需要自己写,比如我访问natureless:8100是没有问题的,因为我在server.js中配置了端口的指向

var app = require('http').createServer(handler);
function handler (req, res) {
console.log(req);
fs.readFile(__dirname + '/app.html',
function (err, data) {
if (err) {
res.writeHead(500);
return res.end('Error loading index.html');
} res.writeHead(200);
res.end(data);
});
}

而我想访问与app.html作为同级目录出现的index.html,通过natureless.cn:8100/index.html访问是无效的因为node拿到get数据index.html他不知道该如何处理,需要自己手动配置,开始的时候,我的想法是对req的消息进行处理,很有耐心的fs.readFile(__dirname+'XX路径'),但是邂逅度娘后,知道express有专门针对静态文件访问的中间件express.static()

app.use(express.static('src'));

这样我们把我们的template都可以放在src中,通过我们熟悉的相对路径就可以访问,引用文件了,这边把服务端的代码贴上

var express=require('express');
var app=express();
var http = require('http').createServer(app);
var io = require('socket.io')(http);
var fs = require('fs');
app.use(express.static('src')); app.get('/', function (req, res) {
res.sendFile( __dirname + "/" + "app.html" );
})
http.listen(8100,function(){
console.log('Natureless server begin...');
}); io.sockets.on('connection', function (socket) {
socket.emit('news', { hello: 'world' });
socket.on('startConnect', function (data) {
io.sockets.emit('news',data);
});
});

其实之所以有如此多的问题,主要源于环境是node配置,我在引入ng2时,只要牵涉路径的问题就各种报错,比如templateUrl

下面贴上app.html代码

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>test</title>
<script type="text/javascript" src="/js/angular2.beta.stack.min.js"></script>
</head>
<body>
<ez-app></ez-app>
<script type="text/typescript">
import {Component} from "angular2/core";
import {bootstrap} from "angular2/platform/browser"; @Component({
selector:"ez-app",
templateUrl : '/view/gameRoom.html'
})
class EzApp{} bootstrap(EzApp);
</script>
</body>
</html>

卡在templateUrl整整三天,各种采坑,最愚笨的问题莫过8100端口上还用80端口上的相对路径,明显跨域,你画我猜的主体框架算是搞定了。。。。。唔,人家的那叫编程之旅,我这叫填坑之旅啊,哈哈

Node学习笔记(四):gulp+express+io.socket部署angularJs2(填坑篇)的更多相关文章

  1. node学习笔记(四)

    //Node.js标准库提供了http模块,其中封装了一个高效的http服务器和一个简易的http客户端 //http.Server是一个基于事件的HTTP服务器,它的核心由Node.js下层c++部 ...

  2. python学习笔记四 迭代器,生成器,装饰器(基础篇)

    迭代器 __iter__方法返回一个迭代器,它是具有__next__方法的对象.在调用__next__方法时,迭代器会返回它的下一个值,若__next__方法调用迭代器 没有值返回,就会引发一个Sto ...

  3. Java IO学习笔记四:Socket基础

    作者:Grey 原文地址:Java IO学习笔记四:Socket基础 准备两个Linux实例(安装好jdk1.8),我准备的两个实例的ip地址分别为: io1实例:192.168.205.138 io ...

  4. 零拷贝详解 Java NIO学习笔记四(零拷贝详解)

    转 https://blog.csdn.net/u013096088/article/details/79122671 Java NIO学习笔记四(零拷贝详解) 2018年01月21日 20:20:5 ...

  5. muduo网络库学习笔记(四) 通过eventfd实现的事件通知机制

    目录 muduo网络库学习笔记(四) 通过eventfd实现的事件通知机制 eventfd的使用 eventfd系统函数 使用示例 EventLoop对eventfd的封装 工作时序 runInLoo ...

  6. 官网实例详解-目录和实例简介-keras学习笔记四

    官网实例详解-目录和实例简介-keras学习笔记四 2018-06-11 10:36:18 wyx100 阅读数 4193更多 分类专栏: 人工智能 python 深度学习 keras   版权声明: ...

  7. C#可扩展编程之MEF学习笔记(四):见证奇迹的时刻

    前面三篇讲了MEF的基础和基本到导入导出方法,下面就是见证MEF真正魅力所在的时刻.如果没有看过前面的文章,请到我的博客首页查看. 前面我们都是在一个项目中写了一个类来测试的,但实际开发中,我们往往要 ...

  8. IOS学习笔记(四)之UITextField和UITextView控件学习

    IOS学习笔记(四)之UITextField和UITextView控件学习(博客地址:http://blog.csdn.net/developer_jiangqq) Author:hmjiangqq ...

  9. java之jvm学习笔记四(安全管理器)

    java之jvm学习笔记四(安全管理器) 前面已经简述了java的安全模型的两个组成部分(类装载器,class文件校验器),接下来学习的是java安全模型的另外一个重要组成部分安全管理器. 安全管理器 ...

随机推荐

  1. zookeeper源码分析之三客户端发送请求流程

    znode 可以被监控,包括这个目录节点中存储的数据的修改,子节点目录的变化等,一旦变化可以通知设置监控的客户端,这个功能是zookeeper对于应用最重要的特性,通过这个特性可以实现的功能包括配置的 ...

  2. 利用apply()或者rest参数来实现用数组传递函数参数

    关于call()和apply()的用法,MDN文档里写的非常清晰明白,在这里就不多做记录了. https://developer.mozilla.org/zh-CN/docs/Web/JavaScri ...

  3. 强强联合,Testin云测&云层天咨众测学院开课了!

    Testin&云层天咨众测学院开课了! 共享经济时代,测试如何赶上大潮,利用碎片时间给女票或者自己赚点化妆品钱?   2016年12月13日,Testin联手云层天咨带领大家一起推开众测的大门 ...

  4. ASP.NET Core 中文文档 第四章 MVC(4.2)控制器操作的路由

    原文:Routing to Controller Actions 作者:Ryan Nowak.Rick Anderson 翻译:娄宇(Lyrics) 校对:何镇汐.姚阿勇(Dr.Yao) ASP.NE ...

  5. 微信公众号开发(一)--验证服务器地址的Java实现

    现在主流上都用php写微信公众号后台,其实作为后端语言之一的java也可以实现. 这篇文章将对验证服务器地址这一步做出实现. 参考资料:1.慕课网-<初识java微信公众号开发>,2.微信 ...

  6. 云计算下PAAS的解析一

    云计算下PAAS的解析一       PaaS是Platform-as-a-Service的缩写,意思是平台即服务. 把服务器平台作为一种服务提供的商业模式.通过网络进行程序提供的服务称之为SaaS( ...

  7. Angular (SPA) WebPack模块化打包、按需加载解决方案完整实现

    文艺小说-?2F,言情小说-?3F,武侠小说-?9F long long ago time-1-1:A 使用工具,long long A ago time-1-2:A 使用分类工具,long long ...

  8. (一)Spark简介-Java&Python版Spark

    Spark简介 视频教程: 1.优酷 2.YouTube 简介: Spark是加州大学伯克利分校AMP实验室,开发的通用内存并行计算框架.Spark在2013年6月进入Apache成为孵化项目,8个月 ...

  9. 笔记:Memory Notification: Library Cache Object loaded into SGA

    笔记:Memory Notification: Library Cache Object loaded into SGA在警告日志中发现一些这样的警告信息:Mon Nov 21 14:24:22 20 ...

  10. java中判断字符串是否为只包含数字

    1.用Java自带的函数 public static boolean isNumeric(String str){ for(int i=str.length();--i>=0;){ if (!C ...