2017-02-08 11 views
-2

通常の関数、つまり経路に含まれていないエクスポートされた関数にresを入れるにはどうしたらいいですか?Node.js(マングース)にresが定義されていません

function createNewStudent(v,callBackOne){ 
    if (callBackOne) { 
    studentInfo.callBackOneStudent = callBackOne; 
    } 
    // common filter json 
    var filterjson = common.defaultFilterJson(); 
    filterjson['active'] = true; 
    filterjson['email'] = v.email; 
    // student initialization 
    var student = new Student(v); 
    async.waterfall([ 
    function (done) { 
      student.save(function (err) { 
       if (!err) { 
       studentInfo.callBackOneStudent(); 
       Employee.update({_id: student.created_by},{"$push": { "students": student._id } }).exec(function (err, employee) { }); 
       done(); 
       } 
      }); 
      } 
     } 
     }); 
    }, 
    function (done) { 
     var url = config.mailer.studentActivateUrl + student._id; 
    ---error is here----- 
     res.render('modules/users/server/templates/student-confirmation-email', { 
     name: student.first_name + ' ' + student.last_name, 
     appName: 'GAIPP', 
     url: url 
     }, function (err, emailHTML) { 
     done(err, emailHTML, student); 
     }); 
    } 
}); 

「res」が定義されていません。誰もこのエラーを解決するために私を助けてくれる?

+0

'res'はコードサンプル全体では単純に定義されていません。すべて貼り付けましたか? –

+0

ここにノードコードを貼り付けましたか? –

答えて

1

resを関数に入れる唯一の方法は、実行時に何らかの形で関数に渡すことです。 resはリクエスト処理でのみ意味があることに注意してください。リクエストハンドラの外では、同時に処理されるリクエストが複数ある可能性があるため、関数はどのリクエストに応答するかを知ることさえできませんでした。

あなたはresへのアクセス権を持っている機能を持つようにしたいなら、あなたはそれらのオプションがあります。

は、リクエストハンドラ内のネストされた関数を使用して、例えば

app.get('/foo', function (req, res) { 
    function x() { 
    // you can use res here 
    } 
    x(); 
}); 

引数としてresを追加します。

function x(res) { 
    // you can use res here 
} 
app.get('/foo', function (req, res) { 
    x(res); 
}); 

別のオプションは、ハンドラによって渡されるあなたの関数にコールバックを追加することです:コールバックを使用するのではなく、

function x(args, cb) { 
    // you cannot use res here 
    // but you can call the callback: 
    cb(null, 'something'); 
} 
app.get('/foo', function (req, res) { 
    x(function (err, data) { 
    if (err) { 
     // handle error 
    } 
    // use res here with data supplied by x() 
    res(data); 
    }); 
}); 

x()関数も約束を返すことができます。