2017-03-03 5 views
0

Ich versuche Google Recaptcha mit diesem Tutorial (https://codeforgeek.com/2016/03/google-recaptcha-node-js-tutorial/) einrichten und verschieben Sie den Recaptcha-Code in ein eigenes Modul. Ich bekomme:res.json ist keine Funktion in Node.js Modul

 
TypeError: res.json is not a function 

in der Konsole, wenn ich diesen Code versuchen:

var checkRecaptcha = function(req, res){ 
    // g-recaptcha-response is the key that browser will generate upon form submit. 
    // if its blank or null means user has not selected the captcha, so return the error. 

    if(req.body['g-recaptcha-response'] === undefined || req.body['g-recaptcha-response'] === '' || req.body['g-recaptcha-response'] === null) { 
     return res.json({"responseCode" : 1,"responseDesc" : "Please select captcha"}); 
    } 

    // Put your secret key here. 
    var secretKey = "************"; 

    // req.connection.remoteAddress will provide IP address of connected user. 
    var verificationUrl = "https://www.google.com/recaptcha/api/siteverify?secret=" + secretKey + "&response=" + req.body['g-recaptcha-response'] + "&remoteip=" + req.connection.remoteAddress; 

    // Hitting GET request to the URL, Google will respond with success or error scenario. 
    var request = require('request'); 
    request(verificationUrl,function(error,response,body) { 

     body = JSON.parse(body); 
     // Success will be true or false depending upon captcha validation. 
     if(body.success !== undefined && !body.success) { 
      return res.json({"responseCode" : 1,"responseDesc" : "Failed captcha verification"}); 
     } 
     return res.json({"responseCode" : 0,"responseDesc" : "Sucess"}); 
    }); 
} 

module.exports = {checkRecaptcha}; 

Warum geschieht das? Ich habe app.use(bodyParser.json()); in meinem app.js gesetzt und res.json() scheint in anderen Teilen meiner App gut zu funktionieren, nur nicht dieses Recaptcha-Modul.

+1

Wie verwenden Sie/einschließlich der Modul-/Middleware Sie gezeigt haben? (Auch 'bodyParser.json()' dient zum * Analysieren * von JSON-Anfragen, nicht zum Senden von JSON-Antworten.) – mscdex

+0

Gibt es eine bestimmte Zeile, in der der Fehler auftritt? – jonathanGB

+0

@jonathanGB Ich bekomme den Fehler in Zeile 7, 23 und 25 (was von der Google-Re-Captcha-Antwort abhängt). –

Antwort

1

Basierend auf Ihrer Verwendung der Middleware übergeben Sie res nicht an die Funktion, sondern einen Rückruf (und checkRecaptcha() hat keinen Rückrufparameter, da er direkt auf die Anforderung reagiert).

diese stattdessen versuchen:

app.post('/login', function(req, res) { 
    var recaptcha = require('./recaptcha'); 
    recaptcha.checkRecaptcha(req, res); 
}); 

oder einfacher:

app.post('/login', require('./recaptcha')); 
Verwandte Themen