【问题标题】:Include db access in my middleware.js file在我的 middleware.js 文件中包含数据库访问权限
【发布时间】:2020-10-05 13:43:44
【问题描述】:

我需要在我的 middleware.js 文件中添加一个新的重复电子邮件控制进程。 这是我的 middleware.js 节点文件:

module.exports = {
    requiresLoggedIn(req, res, next) {
        if (!req.session.loggedIn) {
            console.log(" FORBIDDEN CAUSE YOU ARE NOT LOGGED IN  ")
            res.status(403).send({
                errorCode: "403"
            })
            return
        } else {
            next() // continue the process
        }
    },
    permission_valid(permission) {
        return function(req, res, next) {
            if (!req.session.user.permissions.includes(permission)) {
                console.log(" FORBIDDEN CAUSE THE PERMISSION IS MISSING ")
                res.status(403).send({
                    errorCode: "403"
                })
                return
            } else {
                next() // continue the process
            }
        }
    },
    duplicate_email(db, email) {

        db.collection("users").findOne({
            'email': email
        }, function(findErr, result) {
            if (!result) {
                //  next() // continue the process
                return false;
            } else {
                return true;
            }
        });
    }
}

duplicate_email() 不起作用,因为我的 middleware.js 文件中没有 db.collection 访问权限,我尝试了异步等待,我尝试了很多东西.

我已经尝试将我的中间件更改为这种格式:

module.exports = function(app, db) {
    function requiresLoggedIn(req, res, next) {
        if (!req.session.loggedIn) {
            console.log(" FORBIDDEN CAUSE YOU ARE NOT LOGGED IN  ")
            res.status(403).send({
                errorCode: "403"
            })
            return
        } else {
            next() // continue the process
        }
    }
}

但只要我这样做,requiresLoggedIn(req, res, next)permission_valid(permission) 将不再在 Web 服务中工作,请不要不知道为什么:

这是我的工作网络服务之一,请问我如何将电子邮件复制控制中间件添加到它们? :

  app.post("/createUser", middleware.requiresLoggedIn, middleware.permission_valid("CREATE_USER"), function(req, res) {

这是我应该拥有的,但它不起作用:

  app.post("/createUser", middleware.requiresLoggedIn, middleware.permission_valid("CREATE_USER"),middleware.duplicate_email(db, req.body.email), function(req, res) {

如果你能帮助我一些,我将不胜感激,谢谢。

【问题讨论】:

    标签: node.js express middleware


    【解决方案1】:

    我通过将 db 对象附加到所有请求都继承自的 基本请求 上解决了类似问题。

    import express from 'express';
    
    express.request.db = db;
    // ------^ this is the base request which all requests inherits from.
    

    然后您的db 将在您的中间件/控制器中访问request.db 在每个请求中可用

    【讨论】:

    • 谢谢!这几天我会试试看的!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多