编写express.js应用程序。 辅助方法在哪里去?

所以我开始使用express.js – 我的第一个JS web开发框架。 我没有做任何小事,但开始了一个更大的项目。 我正在学习,并在同一时间build设。

来自Python /烧瓶背景,expression似乎非常复杂。

就像在Python中,如果我想要一个辅助方法,我可以把它放在文件的顶部,或在一个新的模块,并导入它。 超级简单。 但是在node / express中,事情是asynchronous的,一切都在module.exports或者module.exports (??)中。 辅助方法在哪里去? 我如何用callback函数来调用它们?

在另外一个问题中,我问了几次同样的计算。 在Python中,我将编写一个方法(使用if语句和参数),并使用for.. in...循环多次调用它。 我现在的代码是非常多余的。

我如何expression? 编写快速代码的最佳实践是什么?

这真的取决于你的帮手在做什么。 如果数据作为parameter passing给它,则可以将其保存在外部模块中,并使用require访问它。

 // helpers/FormatString.js module.exports = function(str) { return str.toUpperCase(); } // app.js var formatter = require("./helpers/FormatString"); 

但是,如果您需要修改requestresponse对象,那么我会build议将其定义为中间件。 即:

 app.use(function(req, res, next) { // ... do your stuff here }); 

@克拉西米尔给出了一个正确的答案。 关于你的问题如何处理asynchronous帮助函数,我可以给你一个例子(不是通常的foo / bar,而是我自己的帮助函数之一):

 var cached; // as modules can act like singletons I can share values here module.exports = function fetchGoogleCerts(options, callback) { // <-- callback var now = Date.now(); if (ttl > now && cached) { callback(null, cached); // <-- return with success return; } request({ uri: options.certsUrl || defaultCertsUrl, strictSSL: true }, function (err, response, body) { var error, certs; if (!err && response.statusCode === 200) { certs = jsonParse(body); // a local function if (!certs) { callback('parse_error', null); // <-- return an error return; } cached = certs; // ... more code callback(null, cached); // <-- success case } else { error = { error: err, statusCode: response.statusCode }; log.error(error, 'error fetching google certs'); callback(error); // <-- return an error } }); } }; 

并使用帮手:

 fetchGoogleCerts = require('./google-certs.js'), module.exports = function fetchCertsAndDecodeIdToken(token, options, callback) { fetchGoogleCerts(options, function (err, googleCerts) { if (err) { callback({ errorCode: codes.io_error, errorMsg: 'Unable to fetch Google certificates', error: err }); return; } decodeAndVerifyGoogleIdToken(googleCerts, token, options, callback); }); }; 

正如你在上面看到的,简单的解决scheme是为你的asynchronous辅助函数提供一个callback函数。

当然你也可以导出一个扩展EventEmitter的对象,那么你可能不需要callback函数,而是注册事件。 这是一个辅助器发出事件的例子 。