不运行由Typescript和ExpressJs提供的脚本

时间:2012-12-31 13:51:56

标签: javascript node.js coffeescript express typescript

我想将我的简约服务器从Coffeescript翻译成Typescript。 这是原始代码:

express = require("express")
app=express()
app.use(express.static(__dirname))
app.set("views", __dirname + "/views")
app.set("view engine", "jade")
app.get("/", (req,res)->
        res.render "index")
port = process.env.PORT or 5000
server=app.listen(port)

io=require("socket.io").listen(server)
io.sockets.on("connection", (socket)->socket.emit("news", "data"))

这里是Typescript版本:

/// <reference path="d.ts/node.d.ts"/>
/// <reference path="d.ts/socket.io.d.ts"/>
/// <reference path="d.ts/express3.d.ts"/>

import express3 = module("express3");
var express = require("express");
var app = express();
app.use(express.static(__dirname));
app.set("views", __dirname+"/views");
app.set("view engine", "jade");

app.get("/", (req, res) => { res.render("index"); });

var port = 5000;
var server=app.listen(port);

import socketio = module("socket.io");
var io=socketio.listen(app);
io.sockets.on("connection", (socket) => { socket.emit("news", "data"); });

两个版本都编译到server.js没有问题。生成的代码有不同的样式,但据我所知,语义应该是相同的。 您可以查看pastebin上的两个输出文件。

coffeescript:http://pastebin.com/38LZhcPZ

打字稿:http://pastebin.com/95ABVsB2

响应“index.jade”包含一个与RaphaelJs的小型未完成游戏。 现在这是问题所在。如果我启动coffeescript生成的server.js并打开localhost:5000,一切都很好。游戏开始运行。

但如果我运行已编译的打字稿版本,则游戏无法启动。打开localhost:5000没有问题。该网站提供没有错误,如果我检查页面源,它​​就在那里。起初我想也许快递的静态文件服务器会以某种方式不起作用。但是,当我点击页面源中的<script src="../scripts/game.js"/>时,代码就在那里。游戏逻辑是用window.onload启动的,也许有问题,但这看起来很奇怪。

我该怎么办?

2 个答案:

答案 0 :(得分:6)

快速浏览它似乎不是相同的代码:

原创和CoffeeScript生成:

io = require("socket.io").listen(server);

但是你的TypeScript代码有:

var io = socketio.listen(app);

如果您将TypeScript代码修改为以下内容,我认为您应该采取行动:

var io = socketio.listen(server);

答案 1 :(得分:2)

您对socketio.listen()的调用是在CoffeeScript示例中传递 app ,而在TypeScript示例中传递服务器

var io = socketio.listen(app);

io = require("socket.io").listen(server);