node.js - Express.js MVC结构: "Route.get() requires callback" error

标签 node.js express

我希望能够从路由器和 Controller 文件访问我的 EnsureAuthenticated 函数(它位于 app.js 中)。

app.js -> 应用程序主页

feed.js -> Feed 路由器,这里没有任何反应。只是 URL。

feedController.js -> 应用程序逻辑在这里处理。添加、删除、编辑帖子等

app.js

exports.ensureAuthenticated = function (req, res, next) {
    next(); // does nothing atm
};

feed.js(只是一个路由器)

var express = require('express');
var router = express.Router();
var jwt = require('jsonwebtoken');
var auth = require('../../app').ensureAuthenticated;

var feedController = require('../../controllers/frontend/feed/feedController');

router.get('/feedtest', auth, feedController.index);
module.exports = router;

如果我将 EnsureAuthenticated 函数从 app.js 移动到 feed.js,它就可以工作。

feedController.js

exports.index = function (req, res) {
    res.sendStatus(req.id);
};

错误

Error: Route.get() requires callback functions but got a [object Undefined]

最佳答案

您似乎正在处理循环依赖或 cycle .

app.js -> feed.js -> app.js -> feed.js -> ...

当 Node.js 遇到循环时,它只会部分加载两个模块之一 - 直到启动循环的 require() 为止。它将完成加载该模块,评估任何剩余的语句并更新模块缓存,但直到完成加载其他模块之后才会完成。

因此,语句的顺序现在在 app.js 中更加重要:

// ...

// begins cycle, loading of `app.js` pauses here
var feed = require('./routes/feed');

// has not yet been evaluated for `feed.js` to use, so remains `undefined`
exports.ensureAuthenticated = function (req, res, next) {
    next(); // does nothing atm
};

比较:

// ...

// evaluated before the cycle, included within the partial
exports.ensureAuthenticated = function (req, res, next) {
    next(); // does nothing atm
};

// begins cycle, with `ensureAuthenticated` already defined
var feed = require('./routers/feed');
<小时/>

您还可以将 ensureAuthenticated 提取到每个依赖项都需要的单独模块(例如 auth.js)中,并完全避免循环:

auth.js

// ...

exports.ensureAuthenticated = function (req, res, next) {
    next(); // does nothing atm
};

app.js

// ...


// app.js -> feed.js -> auth.js
var feed = require('./routes/feed');

// app.js -> auth.js
var auth = require('./auth');

feed.js

// ...

var auth = require('../../auth');

// ...

关于node.js - Express.js MVC结构: "Route.get() requires callback" error,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33591014/

相关文章:

node.js - Mongoose 鉴别器不适用于嵌入式集合

javascript - 如何在 findAll 上的 node.js Sequelize 中具有多个关联/条件/包含

node.js - 如何使用 Express/Nodejs 缓存单个资源

javascript - 使用 firebase 将文档、pdf 上传到谷歌云。得到错误

node.js - 升级到 AnonymousTraversalSource (Gremlin 3.3.5+ Node.js)

node.js - Socket.io 从客户端发出,但服务器未接收到

node.js - 实现 SequelizeJS 软删除的问题

javascript - 向 Express 服务器发出多个 AngularJS Post 请求?服务器在第二次发布请求时崩溃

javascript - 使用 EventEmitter 而不是回调?

javascript - 使用express在前端读取Base64图像