【发布时间】:2015-03-27 12:08:35
【问题描述】:
对 Node 来说非常(非常)新,所以这可能很愚蠢。我有一个模块,它定义了我迭代的各种路由以定义应用程序的路由。这工作正常。
在设置路线时,我想在另一个模块 language 中调用一个函数 checkAvailableTranslation 来检查该页面的翻译是否存在于另一种语言中(req.locale 是我们正在尝试查找的用户喜欢的语言匹配),如果是,则返回它的 URL 片段。
strings 对象是从 json 文件加载的,其中包含一个项目 translations,它是映射到 URL 片段的 ISO 国家/地区代码数组。
** app.js **
var routes = require("./config/routing.js")
routes.forEach(function(item) {
item.routes.forEach(function(route) {
app.get(route.path, function(req, res) {
var strings = require(route.strings)
translations = language.checkAvailableTranslation(req.locale, strings.translations))
console.log(translations) // undefined?!?!?!?!
res.render(route.render, {
layout: route.layout,
strings: strings
})
})
})
})
** strings.translations **
[
{ "fr": "/fr" },
{ "ar": "/ar" },
{ "es": "/es" },
{ "pt": "/pt" },
{ "de": "/de" }
]
** 语言.js **
module.exports = function() {
var module = {}
module.checkAvailableTranslation = function(language, translations) {
translations.forEach(function(el) {
if( el[language] ) {
console.log(el[language]) // this logs a matched language
return el[language] // this disappears into the ether
}
})
}
return module
}
因此,translations.forEach 成功迭代并找到匹配项时,一切通常都按预期运行。但是,它似乎没有将值返回给 app.js - 当我输出函数的返回值时,我得到undefined。
strings 是从 json 文件加载的事实是否使它成为一个异步调用,就好像它是一个数据库一样?如果是这样(这需要解释),我应该在这里做什么来建立处理这个问题的承诺?
【问题讨论】:
标签: javascript json node.js express