0

error特定の検証チェックが失敗したときにエラーコードが配列に追加される単純な検証スクリプトをノードに記述しようとしています。さらに複雑なことにtranslate、データベース呼び出しを行い、エラー コードに関連付けられた全文 (指定された言語に翻訳) を返す関数も呼び出しています。これを実現するために、非同期ライブラリを使用しています。

残念ながら、検証が失敗する場合でも、次のコードは常に空の配列になります。私は自分のtranslate機能が機能することを独自に確認しました。これが機能しない理由はありますか?

app.post("/user", function(req, res) {

  var error = [];

  if (req.body.username == "") {
    error.push("username_required");
  }

  if (req.body.password == "") {
    error.push("password_required");
  }

  for (var i = 0; i < error.length; i++) {
    error[i] = function(callback) {
      translate(error[i], req.language, function(text) {
        callback(null, text);
      });
    };
  }

  async.parallel(error, function(error, results) {
    res.send(results);
  });

});

translate = function(code, language, callback) {
  var code = database.escape(code);
  var language = database.escape(language);
  database.query("SELECT content FROM text WHERE language = 'en' AND code = " + code, function(error, row) {
    callback(row[0].content);
  });
}
4

1 に答える 1

4

コメントで示唆されているように、async.mapがうまくいきました。これが私の最終的な解決策です:

app.post("/user", function(req, res) {

  var error = [];

  if (!req.body.username) {
    error.push("username_required");
  }

  if (!req.body.password) {
    error.push("password_required");
  }

  async.map(error, function(error, callback) {
    translate(error, req.language, function(text) {
      callback(null, text);
    });
  }, function(error, results) {
    res.send(results);
  });

});
于 2013-05-29T01:42:17.403 に答える