aks*_*hik 1 javascript compiler-errors coffeescript
嘿,我正在学习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 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
Run Code Online (Sandbox Code Playgroud)
当我尝试使用userdataprovider.save(?? BLAH BLAH BLAH ??)//我已经实例化了它.
我收到此错误:
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)
Run Code Online (Sandbox Code Playgroud)
如果重要,我使用Expressjs和Nodejs与Native MongoDB驱动程序
问题是您正在使用=
而不是:
定义实例级方法.
CoffeeScript的class
构造是对象和函数的奇怪混合.类体内的代码立即运行 - 例如,
class UserDataProvider
a = 'foo'
console.log a
Run Code Online (Sandbox Code Playgroud)
打印foo
.但是当您使用对象语法时key: value
,您可以定义原型的属性(特殊关键字constructor
除外):
class UserDataProvider
a: 'foo'
(new UserDataProvider).a # 'foo'
Run Code Online (Sandbox Code Playgroud)
这可能看起来很奇怪,但它允许您运行一次性静态初始化代码,这可能很有用,包括只能通过类中定义的方法看到的私有变量:
class UserDataProvider
secretPassword = Math.random()
getHash: -> hash(secretPassword)
Run Code Online (Sandbox Code Playgroud)
长话短说:使用:
而不是=
定义实例属性.(对于静态属性,@a = b
并且@a: b
是等效的;两者都设置UserDataProvider.a
为b
.)
归档时间: |
|
查看次数: |
1017 次 |
最近记录: |