Node学习笔记(四):gulp+express+io.socket部署angularJs2(填坑篇)

这篇就先暂停下上篇博客--你画我猜的进度,因为在做这个游戏的时候,想采用最新的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端口上的相对路径,明显跨域,你画我猜的主体框架算是搞定了。。。。。唔,人家的那叫编程之旅,我这叫填坑之旅啊,哈哈

posted on 2016-06-17 14:51  natureless  阅读(634)  评论(1编辑  收藏  举报