应用程序主页 feed.js -> Feed -6ren">
gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 22:14:29 24 4
gpt4 key购买 nike

我希望能够从路由器和 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com