我现在从NodeJS开始,我在使用express访问控制器中的某些功能时遇到了问题。
示例:
我的server.js:
var express = require('express');
var consign = require('consign');
var bodyParser = require('body-parser');
var expressValidator = require('express-validator');
var Recaptcha = require('express-recaptcha');
var recaptcha = new Recaptcha('blablabla', 'blablabla');
var app = express();
app.set('view engine', 'ejs');
app.set('views', 'app/views');
app.use(express.static('./app/public'));
consign()
.include('./app/routes')
.then('./app/models')
.then('./app/controllers')
.into(app);
module.exports = app;
app.listen(3000, function () {
console.log('Server ON');
});
我的app / routes / home.js路线:
module.exports = function (myapp) {
myapp.get('/site', recaptcha.middleware.render, function (req, res) {
myapp.app.controllers.home.pagina(myapp, req, res, {title: 'Cadastre-se', url: req.originalUrl, captcha: res.recaptcha});
});
};
我的app / controllers / home.js控制器:
module.exports.pagina = function (myapp, req, res, page) {
res.render("index", page);
};
您将返回错误:
ReferenceError: recaptcha is not defined at Function.module.exports (/Users/User/NodeJS_projects/myapp/app/routes/home.js:2)
如果我按照以下方式调用 server.js 文件中的中间件:
...ss.static('./app/public'));
app.use(recaptcha());
consign()...
返回以下错误:
TypeError: recaptcha is not a function
如何解决这个问题?或者,将中间件传递给控制器或路由的正确方法是什么?
答案 0 :(得分:0)
有几个问题。其一,如果查看express-recaptcha
模块https://mywebsite的文档,则需要解析请求体以使该模块正常工作。要做到这一点,你需要你正确拥有的body-parser
模块,但你还需要添加中间件:
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
您可以在app
文件中定义server.js
后立即添加此内容。然后,您的recaptcha
文件中未定义home.js
。您可以将以下定义从server.js
移至home.js
:
var Recaptcha = require('express-recaptcha');
var recaptcha = new Recaptcha('blablabla', 'blablabla');
此外,您已将app.use(recaptcha());
添加到server.js
文件中。 recaptcha
本身不是一个功能。它包含两个中间件函数,一个用于呈现窗口小部件(recaptcha.middleware.render
),另一个用于验证窗口小部件(recaptcha.middleware.verify
)的响应。这些应添加到负责呈现和验证的特定路由中。我想如果你看一下我提供的链接,它会有所帮助。