/ / res.json não é uma função no módulo Node.js. - json, node.js, express

res.json não é uma função no módulo Node.js - json, node.js, express

Estou tentando configurar o google recaptcha usando este tutorial (https://codeforgeek.com/2016/03/google-recaptcha-node-js-tutorial/) e mova o código recaptcha para o próprio módulo. Eu recebo:

TypeError: res.json não é uma função

no console quando tento este código:

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};

Por que isso acontece? eu tenho app.use(bodyParser.json()); definido no meu app.js e res.json() parece funcionar bem em outras partes do meu aplicativo, mas não neste módulo recaptcha.

Respostas:

1 para resposta № 1

Com base no uso do middleware, você não está passando res para a função, mas um retorno de chamada (e checkRecaptcha() não possui um parâmetro de retorno de chamada, pois responde diretamente à solicitação).

Tente isso:

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

ou mais simplesmente:

app.post("/login", require("./recaptcha"));