Node.js -来自另一个文件的函数作为路由参数



我正试图使我的程序更加模块化,因为它现在相当混乱。但是每次尝试重构我的代码,我总是得到一堆错误和一个不能工作的程序。

我想做的是创建多个具有各自工作负载的文件,如果我需要在另一个文件中使用某些内容,我基本上可以"借用"。该函数。

从我现有的代码示例:

Index.js

//Routers 
const getPostsRouter = require('./routes/getPosts');
app.use('/getPosts', getPostsRouter);
///////////////////////////////////////////////////////////////////////////////////////////////
const authenticateToken = (req, res, next) => {
const authHeader = req.headers['authorization'];
const token = authHeader && authHeader.split(' ')[1]
if (token == null) return res.sendStatus(401);
jwt.verify(token, process.env.ACCESS_TOKEN_SECRET, (err, user) => {
if (err) return res.sendStatus(403);
req.user = user
next()
})
}
module.exports = authenticateToken;

然后在getPosts.js文件中我想要这样做

const express = require('express');
const router = express.Router();
const db = require('../databaseConnection');
const {authenticateToken} = require('../index')
router.get('/', authenticateToken, async (req, res) => {
await db.query('SELECT * FROM posts', 
(err, result) => {
if (err) {
res.send({errorMessage: err});
}
res.send(result);
});
}
}); 
module.exports = router;

但是当我尝试这个时,我总是得到这个错误:"错误:Route.get()需要一个回调函数,但得到一个[object Undefined]"指向"const getPostsRouter = require('./routes/getPosts');"在index.js

编辑:问题在于循环依赖关系!我所需要做的就是删除依赖项的一边,现在一切都按预期工作了!

删除括号,因为默认情况下您总是导出authenticateToken…

const express = require('express');
const router = express.Router();
const db = require('../databaseConnection');
const authenticateToken = require('../index'); // <---- HERE
router.get('/', authenticateToken, async (req, res) => {
await db.query('SELECT * FROM posts', 
(err, result) => {
if (err) {
res.send({errorMessage: err});
}
res.send(result);
});
}
}); 
module.exports = router;

最新更新