试图让coffeescript正确编译为节点服务器的javascript

时间:2013-09-18 05:30:07

标签: javascript node.js coffeescript

我正在研究node.js上的一本书,但我试图用coffeescript而不是javascript来学习它。

目前正在尝试将一些coffeescript编译为此js,作为路由演示的一部分:

var http = require('http'),
      url = require('url');

  http.createServer(function (req, res) {
    var pathname = url.parse(req.url).pathname;

    if (pathname === '/') {
        res.writeHead(200, {
        'Content-Type': 'text/plain'
      });
      res.end('Home Page\n')
    } else if (pathname === '/about') {
        res.writeHead(200, {
        'Content-Type': 'text/plain'
      });
      res.end('About Us\n')
    } else if (pathname === '/redirect') {
        res.writeHead(301, {
        'Location': '/'
      });
      res.end();
     } else {
        res.writeHead(404, {
        'Content-Type': 'text/plain'
      });
      res.end('Page not found\n')
    }
  }).listen(3000, "127.0.0.1");
  console.log('Server running at http://127.0.0.1:3000/'); 

这是我的coffeescript代码:

http = require 'http'
url  = require 'url'
port = 3000
host = "127.0.0.1"

http.createServer (req, res) ->
    pathname = url.parse(req.url).pathname

    if pathname == '/'
        res.writeHead 200, 'Content-Type': 'text/plain'
        res.end 'Home Page\n'

    else pathname == '/about'
        res.writeHead 200, 'Content-Type': 'text/plain'
        res.end 'About Us\n'

    else pathname == '/redirect'
        res.writeHead 301, 'Location': '/'
        res.end()

    else
        res.writeHead 404, 'Content-Type': 'text/plain'
        res.end 'Page not found\n'

.listen port, host

console.log "Server running at http://#{host}:#{port}/"

我要回的错误是:

helloworld.coffee:14:1: error: unexpected INDENT
        res.writeHead 200, 'Content-Type': 'text/plain'
^^^^^^^^

这让我觉得我设置if...else逻辑的方式有问题;当我编译时,它看起来也可能会尝试return res.end语句,而不是将其添加为第二个运行函数。

有任何想法可能会发生这种情况,以及如何修复我的代码?

2 个答案:

答案 0 :(得分:3)

将您的else更改为else if,除了最后一次,它在res.writeHead 200, 'Content-Type': 'text/plain'上投诉,因为您在第一个之后已经有表达式 - else pathname == '/about'

答案 1 :(得分:1)

这纯粹是制表符与空格的问题。 如果确实如此,请确保您的编辑器不会将空格转换为制表符。此外,使用光标检查代码并确保它不会跳过空白区域。 问题在于,虽然普通编辑器看到一个标签相当于两个或四个空格,但是coffeescript将其视为一个空格,因此缩进变得混乱。