所以我试图避免多次要求,因此我正在设计所有模块以从主app.js
文件中获取参数。我有一个供用户登录的模块,如下所示:
module.exports = (express, router, jwt, user, config) => {
function jwtSignUser (user) {
const ONE_WEEK = 60 * 60 * 24 * 7
return jwt.sign(user, config.authentication,jwtSecret, {
expiresIn: ONE_WEEK
})
}
router.post('/login', function(req, res, next) {
const result = user.findOne(
{
email: req.body.email
},
function (err, user) {
if (err) {
res.status(400).send(err)
}
console.log(user)
res.send({
user: user,
token: jwtSignUser(user)
})
}
)
})
return router
}
但是当我尝试运行它时,我收到错误TypeError: jwtSignUser is not a function
如何使用此函数但仍然让模块接受函数所需的参数(如jwt)?有没有更好的方法来构建它?我是Javascript的新手
答案 0 :(得分:0)
我不知道这是否是“最佳”方式。但是我做了一些重新分解,并通过以下方式让它发挥作用:
var jwtSignUser = (jwt, config, user) => {
const ONE_WEEK = 60 * 60 * 24 * 7
return jwt.sign(user, config.authentication.jwtSecret, {
expiresIn: ONE_WEEK
})
}
var main = (express, router, jwt, user, config) => {
router.post('/login', function(req, res, next) {
const result = user.findOne(
{
email: req.body.email
},
function (err, user) {
if (err) {
res.status(400).send(err)
}
console.log(user)
res.send({
user: user,
token: jwtSignUser(jwt, config, user.toObject())
})
}
)
})
return router
}
module.exports = main
这不是此代码现在有效的真正原因。我有config.authentication,jwtSecret
的部分应该是config.authentication.jwtSecret
。无论我在哪里坚持使用jstSignUser函数,它现在似乎都能正常工作