【发布时间】:2018-03-16 21:44:49
【问题描述】:
我现在开始使用 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
如何解决这个问题?或者,将中间件传递给控制器或路由的正确方法是什么?
【问题讨论】:
-
您是否安装了“express-recaptcha”,例如运行 npm install --save express-recaptcha
-
@MattLong 已安装。如果我在 server.js 上运行直接命令,它可以工作。
-
您希望
recaptcha.middleware.render在app/controllers/home.js控制器中如何定义?您是否在该文件的某处导入recaptcha?如果是的话,你能分享完整的代码吗? -
@Behrooz 这是完整的代码。我对调用 home.js 控制器中的 pagina() 函数的 home.js 路由进行了更正
-
我会将 server.js 的第 6-7 行移到一个模块中,在该模块中将导出 recaptcha。然后你可以在你需要的地方导入它(这两个路由模块)