2011-02-02 79 views
0

我试图创建一个基于正则表达式匹配调用函数的Web服务器。下面是一个例子。但是,我无法调用匹配函数。此代码会导致node.js崩溃,说对象方法不是函数。我究竟做错了什么?基于表达式的Web服务器

http = require "http" 

http.createServer((req, res) -> 
    res.writeHead 200, {"Content-Type": "text/plain"} 
    res.end handle req 
).listen 8080 

console.log "Server running at http://127.0.0.1:8080/" 

paths = [ 
    method: home, expression: "/" 
    method: user, expression: "/user" 
] 

home = (req) -> 
    return "This is the home" 

user = (req) -> 
    return "This is a user page" 

handle = (req) -> 
    for path in paths 
     if req.url.match path.expression 
      console.log path.expression 
      return path.method req 

回答

2
  • home/user在创建paths的时间没有被定义。
  • paths不会是这种方式的对象数组。 (见FAQ

尝试:

http = require "http" 

http.createServer (req, res) -> 
    res.writeHead 200, "Content-Type": "text/plain" 
    res.end handle req 
.listen 8080 

console.log "Server running at http://127.0.0.1:8080/" 

home = (req) -> "This is the home" 
user = (req) -> "This is a user page" 

paths = [ 
    {} = method: home, expression: "/" 
    {} = method: user, expression: "/user" 
] 

handle = (req) -> 
    for path in paths 
     if req.url is path.expression 
      console.log path.expression 
      return path.method req