gpt4 book ai didi

javascript - ExpressJS 路由中间件中的依赖注入(inject)

转载 作者:行者123 更新时间:2023-11-30 06:21:23 26 4
gpt4 key购买 nike

您好,我正在尝试向 expressjs 路由中间件中注入(inject)一些依赖项。

通常在您的主应用程序中您会这样做:

const express = require('express');
const userRouter = require('./routes/users.js');
const app = express();
app.use('/users', userRouter);

在你的 users.js 中,你会有类似的东西:

const express = require('express');
const router = express.Router()
router.post('/user', function (req, res, next) {...}
router.get('/user/:id', function (req, res, next) {...}
router.put('/user/:id', function (req, res, next) {...}
router.delete('/user/:id', function (req, res, next) {...}

但我想传递一些依赖项,例如一个服务 URL,从文档中不清楚如何做到这一点,我想是这样的:

const express = require('express');

function userRoutes(options) {
const router = express.Router();

router.post('/user', function (req, res, next) {...}
router.get('/user/:id', function (req, res, next) {...}
router.put('/user/:id', function (req, res, next) {...}
router.delete('/user/:id', function (req, res, next) {...}

return router
}

module.exports.userRoutes = userRoutes;

然后在我的主应用程序中使用它:

const userRouter = require('./routes/users.js');
const app = express();
app.use('/users', userRouter.userRoutes(options));

但我得到:

Users/jm/Private/Projects/api-gateway/node_modules/express/lib/router/index.js:458
throw new TypeError('Router.use() requires a middleware function but got a ' + gettype(fn))
^

TypeError: Router.use() requires a middleware function but got a undefined
at Function.use (/Users/jm/Private/Projects/api-gateway/node_modules/express/lib/router/index.js:458:13)
at EventEmitter.<anonymous> (/Users/jm/Private/Projects/api-gateway/node_modules/express/lib/application.js:220:21)
at Array.forEach (native)
at EventEmitter.use (/Users/jm/Private/Projects/api-gateway/node_modules/express/lib/application.js:217:7)
at Object.<anonymous> (/Users/jm/Private/Projects/api-gateway/app.js:28:5)
at Module._compile (module.js:570:32)
at Object.Module._extensions..js (module.js:579:10)
at Module.load (module.js:487:32)
at tryModuleLoad (module.js:446:12)
at Function.Module._load (module.js:438:3)

任何建议/解决方案表示赞赏。

最佳答案

我试过你的代码,它对我有用。这些是我的文件,以防万一。

package.json:

{
"name": "problem",
"version": "1.0.0",
"description": "",
"main": "index.js",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1",
"start": "node index.js"
},
"author": "",
"license": "ISC",
"dependencies": {
"express": "^4.16.4"
}
}

索引.js

const express = require('express');
const http = require('http');

const userRouter = require('./routes/users.js');
const app = express();
const options = {};
app.use('/users', userRouter.userRoutes(options));

const server = http.createServer(app);
server.listen(3000);
console.log('listening on port 3000');

routes/users.js

const express = require('express');

function userRoutes(options) {
const router = express.Router();

router.post('/user', function (req, res, next) {res.json({done:true})})
router.get('/user/:id', function (req, res, next) {res.json({done:true})})
router.put('/user/:id', function (req, res, next) {res.json({done:true})})
router.delete('/user/:id', function (req, res, next) {res.json({done:true})})

return router
}

module.exports.userRoutes = userRoutes;

当我运行 npm start 时,它开始监听端口 3000。它开始了。

关于javascript - ExpressJS 路由中间件中的依赖注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52843868/

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