Javascript 另一个咖啡脚本错误

Javascript 另一个咖啡脚本错误,javascript,compiler-errors,coffeescript,Javascript,Compiler Errors,Coffeescript,嘿,我只是在学习咖啡脚本,我不断地出错。这是我的密码: Db = require('./lib/mongodb').Db ObjectID = require('./lib/mongodb').ObjectID Server = require('./lib/mongodb').Server class UserDataProvider constructor = (host,port)-> this.db = new Db( 'test' , new S

嘿,我只是在学习咖啡脚本,我不断地出错。这是我的密码:

Db   = require('./lib/mongodb').Db
ObjectID = require('./lib/mongodb').ObjectID
Server   = require('./lib/mongodb').Server

class UserDataProvider
    constructor = (host,port)->
        this.db = new Db( 'test' , new Server(host ,port,{}))
    getCollection = (callback) ->
        this.db.collection 'data',(error,data)->
            if error then callback(error)
            else callback(data)
    findAll = (callback) ->
        this.getCollection (error,data)->
            if error then callback error
            else
                data.find (error, cursor) ->
                    if error then callback error
                    else
                        cursor.toArray (error, results)->
                            if error then callback error
                            else callback(null,results)
    findById = (id,callback)->
        this.getCollection (error, data)->
          if error then callback error
          else
            data.findOne { _id: id} , (error, result)->
              if error then callback error
              else callback(null, result)
    save = (data, callback)->
        this.getCollection (error, collection)->
            if error then callback error
            else
                if typeof(data.length) is "undefined"
                then data = [data]

                collection.insert data ()->
                    callback null, data

exports.UserDataProvider = UserDataProvider
当我尝试使用 userdataprovider.save??诸如此类的废话???//我已经实例化了它

我得到这个错误:

TypeError: Object #<UserDataProvider> has no method 'save'
    at Object.<anonymous> (/home/akshay/dev/statServer/app.js:8:15)
    at param (/usr/local/lib/node/.npm/connect/0.5.10/package/lib/connect/middleware/router.js:146:21)
    at param (/usr/local/lib/node/.npm/connect/0.5.10/package/lib/connect/middleware/router.js:157:15)
    at pass (/usr/local/lib/node/.npm/connect/0.5.10/package/lib/connect/middleware/router.js:162:10)
    at Object.router [as handle] (/usr/local/lib/node/.npm/connect/0.5.10/package/lib/connect/middleware/router.js:168:6)
    at next (/usr/local/lib/node/.npm/connect/0.5.10/package/lib/connect/index.js:218:15)
    at Object.handle (/usr/local/lib/node/.npm/express/1.0.7/package/lib/express/server.js:65:5)
    at next (/usr/local/lib/node/.npm/connect/0.5.10/package/lib/connect/index.js:218:15)
    at Server.handle (/usr/local/lib/node/.npm/connect/0.5.10/package/lib/connect/index.js:231:3)
    at Server.emit (events.js:45:17)

如果有必要的话,我将Expressjs和Nodejs与本机MongoDB驱动程序一起使用

问题在于您使用=而不是:来定义实例级方法

CoffeeScript的类构造是对象和函数的奇怪混合体。类主体中的代码会立即运行,例如

class UserDataProvider
    a = 'foo'
    console.log a
印福。但当您使用对象语法key:value时,您定义了原型的属性,特殊关键字构造函数除外:

这似乎有些奇怪,但它允许您运行一次性静态初始化代码,这可能很有用,包括只能由类中定义的方法看到的私有变量:

class UserDataProvider
    secretPassword = Math.random()
    getHash: -> hash(secretPassword)

长话短说:定义实例属性时使用:而不是=。对于静态特性,@a=b和@a:b是等效的;两者都将UserDataProvider.a设置为b。

问题在于您使用的是=而不是:来定义实例级方法

CoffeeScript的类构造是对象和函数的奇怪混合体。类主体中的代码会立即运行,例如

class UserDataProvider
    a = 'foo'
    console.log a
印福。但当您使用对象语法key:value时,您定义了原型的属性,特殊关键字构造函数除外:

这似乎有些奇怪,但它允许您运行一次性静态初始化代码,这可能很有用,包括只能由类中定义的方法看到的私有变量:

class UserDataProvider
    secretPassword = Math.random()
    getHash: -> hash(secretPassword)

长话短说:定义实例属性时使用:而不是=。对于静态特性,@a=b和@a:b是等效的;两者都将UserDataProvider.a设置为b。

太棒了,我不知道。我在文档中找不到它。非常感谢你。文档是否落后于代码?是的,文档中的所有示例都使用:;在1.0之前不久,新引入了全班立即运行的东西。确切地说,它没有注明日期,但在简要概述和涵盖所有内容之间有一个平衡,你知道吗?我看到可执行类主体是一个有待解决的问题。太棒了,我不知道这一点。我在文档中找不到它。非常感谢你。文档是否落后于代码?是的,文档中的所有示例都使用:;在1.0之前不久,新引入了全班立即运行的东西。确切地说,它没有注明日期,但在简要概述和涵盖所有内容之间有一个平衡,你知道吗?我看到可执行类主体是当前的一项任务。