Articles of coffeescript

编译Coffeescript时不要添加var

我在写一个简单的应用程序,使用John Resig的简单类inheritance 。 我在Node.js中这样做,我也使用CoffeeScript。 我试图编写CoffeeScript, 在BrowserQuest游戏中输出类似于这个文件的代码。 当我这样写CoffeeScript的时候, cls = require './class' module.exports = Model = cls.Class.extend({ init: () -> console.log 'Model.init()' }) “var”会自动添加到Model中,因此似乎不能正确导出。 var Model, cls; cls = require('../class'); module.exports = Model = cls.Class.extend({ init: function() { return console.log('Model.init()'); } }); 有没有办法标记一个variables不使用CoffeeScript的“var”?

自定义错误在throw语句或next()调用中不能正确传播

我正在开发一个Node.js / CoffeeScript应用程序,我正在使用类层次结构的错误。 当我在路由处理程序的根中使用throw语句时,一切正常。 class APIError extends Error constructor: -> app.error (err, req, res, next) -> if err instance of APIError console.log 'APIError captured' app.get '/', (req, res, next) -> throw new APIError 但是,在Mongoose中,在callback函数中使用throw语句: app.get '/', (req, res, next) -> UserModel.where('name', 'Joe').findOne (err, doc) -> throw new APIError 结果是 /usr/local/lib/node_modules/mongoose/lib/utils.js:413 throw err; ^ Error: 当我调用next()而不是,如 […]

每次testing之前都无法获得所需的文件

我尝试将咖啡与咖啡和柴混合使用。 在包含testing的每个文件之前,我想包含以下文件: testing/ _helper.coffee path = require 'path' AppDir = path.resolve("#{__dirname}/../src/app") chai = require('chai') should = chai.should() factories = require('chai-factories') chai.use(factories) 这样我才能访问AppDirvariables。 所以当我想要一个文件时,我不需要指定app目录的完整path。 testing/应用程序/ setup-test.coffee describe 'Setup instance', -> it 'should be a object', -> setup = require "#{AppDir}/setup" setup.should.be.a('object') 我尝试了以下设置: 添加_hellper.coffee摩卡命令行选项,如下所示: ./node_modules/.bin/mocha –require coffee-script –require test/_helper.coffee –compilers coffee:coffee-script –recursive –reporter spec test 所以: ./node_modules/.bin/mocha […]

我的摩卡testing分开工作,但一次运行全部失败

这可能与asynchronous代码有关,但我不知道是什么。 当我将它们分开时,两者都通过: mocha test/models.coffee和mocha test/login.coffee 但是, describe 'saving another user with same username', ->与npm test一起运行testing失败。 我想数据库得到清除,因为它正在运行该步骤,所以它节省了,而不是产生一个错误,因为它应该是一个独特的价值。 另外:在这个软件testing方面我是非常新的,如果有人有任何提示,或者想批评我公然的错误,随时给我发电子邮件(检查我的个人资料) 谢谢!! 这里是我的两个testing文件(coffeescript): /test/models.coffee should = require 'should' {User} = require '../models' # function to find our test user, John Egbert findJohn = (cb) -> User.findOne {'public.username': 'john'}, (err, john) -> throw err if err cb(john) before (done) -> […]

我如何断言一个函数被调用?

我有一个山羊类: class Goat constructor: (@headbutt) -> @isCranky = true approach: -> if @isCranky @headbutt() 我想写一个摩卡testing来声明,如果isCranky为true并调用方法,则调用headbutt()。 我能find的唯一解释是在Ruby中。 试着翻译它,但失败了。 我怎样才能断言正确的function被称为? 我认为我可以用一种拙劣的方式解决问题,但宁可学习正确的方法。 build议?

导出所需的相同对象会混淆摩卡

我正在使用摩卡运行unit testing的节点应用程序。 当我运行这个命令时: mocha –compilers coffee:coffee-script –reporter spec ./test/unit/*-test.coffee 我得到这个错误: ERROR: Unknown option –compilers 看来摩卡是混乱的,因为它肯定有一个编译器选项。 当我添加一个新的文件到项目时,这个错误开始发生。 这是我可以得到摩卡生成的唯一输出。 – 破坏者什么都不做。 比方说,我有一个名为人安装的软件包。 我想全局configuration这个包,这样我就可以在我的项目的任何地方导入configuration的对象。 为此,我导入人员,将其configuration为驱动程序,然后重新导出。 但是,当我导入它(无论是在Car.coffee或Car-test.coffee),摩卡失败,出现上述错误。 Driver.coffee driver = require 'person' driver.setSkill "Drive" module.exports = driver Car.coffee driver = require './driver' … Car-test.coffee driver = require '../../src/driver' … 请注意,这工作正常,如果我只是用咖啡编译和运行节点项目。 这里没有问题导入。 但是当我用摩卡运行,如果我导入文件失败。 我无法确定这个错误。 这看起来就像摩卡的一个错误,但也许我正在做一些“坏”的东西,通过导出相同的对象,我导入,节点只是更宽容? 我正在使用最新版本的摩卡(1.13.0)。 谢谢! 编辑: 这不能解决这个错误,而且不是理想的语法: person […]

使用节点的作用域http客户端的选项,将rejectUnauthorized设置为false

使用节点的HTTP库,我可以轻松设置我想要的选项 options = port: 443 path: "/" method: 'GET' rejectUnauthorized: false https.get options, (res) -> … 我如何做node-scoped-http-client的同样的事情? # Passing options doesn't seem to work (defined as above) cli = msg.http(stats_url, options) # Injecting it doesn't pass it on either cli.options['rejectUnauthorized'] = false 我仍然得到这个错误: ERROR Error: UNABLE_TO_VERIFY_LEAF_SIGNATURE 我在这里错过了什么吗? 我对node和coffeescript相当陌生。

CoffeeScript – configurationSublimeText作为一个简单的IDE

我是CoffeeScript的新手,我想用SublimeText来试验它。 理想情况下,我想模仿小提琴沙拉优秀的在线编辑function – 特别是我想看到输出 – 即这样 console.log 'Hello World' 实际上在控制台中显示“Hello World”… 我在Windows上,并按照这些说明 ,并使用以下“生成”文件: { "cmd": ["coffee.cmd","-c","$file"], "file_regex": "^(…*?):([0-9]*):?([0-9]*)", "selector": "source.coffee" } 这让我尽可能编译咖啡文件到JavaScript,但没有进一步。 顺便说一句,我不禁想知道为什么这么难。 我热衷于学习(直到这一点),我不认为自己是一个白痴,但似乎Web应用程序的发展几乎故意深奥和过度。 帮助赞赏。

如何在Multer Express中validationfile upload的大小?

我使用Multer作为Express中的 multipart/form-data中间件。 我想知道如何validation上传的文件的大小,最好是他们正在上传。 我知道你可以在实例化Multer的时候在options对象中设置limits : app.use multer limits: fileSize: 1024 * 1024 但是,这只会截断上传的文件,不允许显示“文件太大”的错误消息。 当文件大小超过限制时。 我也检出了事件处理函数onFileUploadData(file, data) ,您可以在其中访问file对象和data缓冲区。 在这里,我可以通过检查data.length来检查当前的文件大小。 但是,我不清楚如何处理data.length大于我想允许的最大上传文件大小的情况。 最终,我的想法是,当Multerparsing请求并且上传的文件太大时,我想向用户显示一条Flash消息并redirect到表单,以便可以尝试更小的文件。 我的控制器的create行为看起来像这样: exports.create = (req, res) -> Record.create(req.body) .success (record) -> image = req.files.image uploadImage(image, record.id).then -> req.flash 'success', 'Record created.' res.redirect "/records/#{record.id}" .error (err) -> req.flash 'error', err res.redirect 'records/new' 问题是, req.files.image已经是parsing的图像,此时上传到系统tmp文件夹。 所以即使在这里检查文件的大小也不会真的让我防止不必要的大file upload。 一般来说,使用Multer或其他表单parsing中间件来处理Express的file […]

module.exports和外部范围

foo.coffee: class Foo constructor: -> console.log BAR module.exports = Foo main.coffee: BAR = 1 class Bar constructor: -> console.log BAR new Bar() Foo = require './foo' new Foo() 然后 $ coffee main.coffee 1 ReferenceError: BAR is not defined 为什么在Foo的实例中不能访问BAR ? 我可以使它对Foo对象“可见”(除了显式传递给构造函数外)吗?