【问题标题】:Script served by Typescript and ExpressJs is not runTypescript 和 ExpressJs 提供的脚本未运行
【发布时间】:2012-12-15 15:52:04
【问题描述】:

我想将我的简约服务器从 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 上的两个输出文件。

咖啡脚本:http://pastebin.com/38LZhcPZ

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

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

但是如果我运行编译后的打字稿版本,游戏并没有开始。打开 localhost:5000 没有问题。该网站的服务没有错误,如果我检查页面源,它​​就在那里。起初我以为 express 的静态文件服务器可能无法正常工作。但是当我点击页面源代码中的&lt;script src="../scripts/game.js"/&gt; 时,代码就在那里。游戏逻辑是用window.onload启动的,可能有问题,但看起来比较奇怪。

我能做什么?

【问题讨论】:

    标签: javascript node.js coffeescript express typescript


    【解决方案1】:

    乍一看,这似乎不是相同的代码:

    原始和 CoffeeScript 生成:

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

    但是你的 TypeScript 代码有:

    var io = socketio.listen(app);
    

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

    var io = socketio.listen(server);
    

    【讨论】:

      【解决方案2】:

      您对 socketio.listen() 的调用在 CoffeeScript 示例中传递了 app,但在 TypeScript 示例中传递了 server

      var io = socketio.listen(app);
      
      io = require("socket.io").listen(server);
      

      【讨论】:

      • 成功了,+1。您的答案与上面完全相同,不幸的是我看不出哪个是第一个。没有冒犯的意思,但我会接受亚历克斯·克洛克的回答,因为他的声誉较低,相对而言会获得更多收益
      猜你喜欢
      • 2021-08-07
      • 2021-09-23
      • 1970-01-01
      • 1970-01-01
      • 2021-07-30
      • 2023-03-16
      • 1970-01-01
      • 1970-01-01
      • 2016-11-17
      相关资源
      最近更新 更多