Articles of 干

NodeJS:保持库文件干燥

我最近开始在CoffeeScript中开发一个不平凡的项目,我正在努力处理注册输出等问题。我正在以非常“pythonesque”的方式编写它,个人文件有效地被称为“模块”相关的类和function。 我正在寻找的是在本地和在exports / window中尽可能less地重复定义类和函数的最佳方式。 目前,我在每个文件中使用以下内容,以节省写入exports.X = X文件中的所有内容: class module # All classes/functions to be included in exports should be defined with `@` # Eg class @DatClass exports[name] = item for own name, item of module 我也研究过使用一个函数(比如publish ),根据名称将传入的类放在exports / window中的可能性: publish = (f) -> throw new Error 'publish only works with named functions' unless f.name? ((exports […]

有没有一种方法来有条件地向Node.js中的对象添加值?

我有一个node.js脚本,如果存在本地或全局值,我将向对象添加键。 我觉得应该有一个很好的方法来简化这个,但我没有看到它。 有没有办法让这个代码更简洁: var object = { defaultKey: defaultValue }; // Add some conditional keys based on local and global settings // With local settings taking precedence if (local.firstSetting || firstSetting) { entry.firstSetting = local.firstSetting || firstSetting; } if (local.secondSetting || secondSetting) { entry.secondSetting = local.secondSetting || secondSetting; } if (local.thirdSetting || thirdSetting) { entry.thirdSetting […]

在Node.js中进行DRYtesting

我已经写了一个Node.js CLI,并希望进一步的开发以TDD风格进行。 我有一个理想的工作stream程,想知道现有的框架是否可行。 当我编写一个新的函数时,我想在一个断言中logging它的前提条件,如果input没有被validation,将会抛出一个错误。 后置条件应在function中或附近指定 前置条件和后置条件应该生成用npm test运行的npm test 断言只能在开发模式下检查 每个函数中的文档都应该为CLI生成(html | md)文档 如果我想添加除前置条件/​​后置条件/不变testing之外的testing,应该很容易 当嘲笑testing时,应该有一种方法来指定“之前的宇宙”和“之后的宇宙”。 例如,为了testing支持新项目的命令,我应该能够将初始目录结构指定为空({}),并将最终目录结构指定为表示结果的JSON对象({name:“project “,path:”/项目“,types:”目录“,儿童:{…}})< – 或类似的东西。 这似乎需要拦截写入文件系统的能力。 我还没有自动化testing生成的候选库。 我认为Mocha , rewire和Contractual / Obligations可能适用于其他任何事情,但是我有兴趣了解其他方法。

我怎样才能以DRY的方式编写Node.js Web服务?

我正在写一堆web服务,它们都有一些共同的模式。 例如,他们都有相同的要求 var x = require(…); var y = require(…); 做类似的authentication var auth = express.basicAuth(…); server.use(auth); 并有类似的错误信息。 server.error(function(err, req, res, next){ … }); 有没有办法在一个共同的地方写上述内容,如果有什么变化,我可以做一个单一的变化,而不是五六个?

WebSockets加RESTful接口,如何编写Node.js中的DRY代码?

我的Node.js应用程序提供了WebSockets和RESTful接口。 我写了一个替代Backbone.synch与Socket.IO一起使用的传输。 DRY问题 :在客户端事件上执行的callback包含与RESTulpath的callback几乎相同的逻辑。 客户端发出的事件和数据之间的映射示例以及相应的操作: +—————-+———————————+——————–+ | event emitted | data emitted | RESTful URL | +—————-+———————————+——————–+ | read:users | empty string | GET /users | | read:users | id of the model | GET /users/:id | | create:users | full model as JSON | POST /users | | destroy:users | id of the model […]

在expressjs渲染中干燥布局本地化

我在nodejs中使用express,并试图保持我的视图呈现干燥。 在我的布局里面,我有以下的东西(我在用玉石) body nav.login -if(currentUser) ="logged in information" -else ="logged out information" !=body 问题是,我每次渲染,现在我需要有 res.render('anything.jade',{ locals: { currentUser: req.session.currentUser, /*all of my other locals*/ } }); 看起来像是一个痛苦,必须通过所有的渲染调用,并添加,然后做同样的事情,如果我必须添加任何其他当地人的布局。 有什么办法可以避免在我渲染的任何地方重新input“currentUser”到当地人

在NodeJS中需要几个模块的最佳方法

我不太喜欢需要模块的标准方式,这是这样的: connect = require 'connect' express = require 'express' redis = require 'redis' sys = require 'sys' coffee = require 'coffee-script' fs = require 'fs' 这不完全是干的。 在一个适中的CoffeeScript服务器中,require舞需要占用整个脚本的一小部分! 我一直在玩弄以下select: "connect,express,redis,sys,coffee-script,fs" .split(',').forEach (lib) -> global[lib] = require lib 既然我还没有看到有人试图重构标准方法,我想我会问这样做是否合理,如果是的话,有没有更好的方法来做到这一点?