Javascript 设置身份验证中间件以减少Express.js中的重复代码

Javascript 设置身份验证中间件以减少Express.js中的重复代码,javascript,node.js,express,middleware,Javascript,Node.js,Express,Middleware,正如标题所示,我希望为我呼叫的每一条新路线减少重复的授权代码。 因为显然我们从GitHub存储库下载了相同的项目 我尝试了答案中建议的两种解决方案,但它限制了我访问这些路由,即使我已登录 代码如下: 路由器.js //获取读取数据的路径 router.get/,函数请求,res,下一步{ 返回res.sendFilepath.join\u dirname+/login; }; //出口授权模块 var auth=require../auth; //验证用户是否有权访问此路由 router.ge

正如标题所示,我希望为我呼叫的每一条新路线减少重复的授权代码。 因为显然我们从GitHub存储库下载了相同的项目

我尝试了答案中建议的两种解决方案,但它限制了我访问这些路由,即使我已登录

代码如下:

路由器.js

//获取读取数据的路径 router.get/,函数请求,res,下一步{ 返回res.sendFilepath.join\u dirname+/login; }; //出口授权模块 var auth=require../auth; //验证用户是否有权访问此路由 router.get/complete-profile,auth.isAuthorized,函数请求,res,下一步{ 返回res.sendFilepath.join\uu dirname,../public,image.html; }; //读取图像上载文件夹 router.useexpress.staticpublic; //登录后获取路由,验证用户是否登录 router.get/complete-profile,函数请求,res,下一步{ User.findByIdreq.session.userId.execfunction错误,用户{ 如果错误{ 回归恐怖; }否则{ 如果用户===null{ var err=新错误未授权!返回!; err.status=400; 返回nexterr; }否则{ //将新用户发送到图像上载页面 返回res.sendFilepath.join\uu dirname,../public,image.html; } } };
}; 在您引用的答案中,用户似乎已安装并正在使用Sequelize存储个人的用户数据。如果您想利用这种方法,我将研究Sequelize。正如您在另一个线程中提到的,未定义用户。对于另一个问题,提问者最有可能建立一个名为User的模型

在Sequelize中,每个类似模型的用户定义一个表,该表有自己的行和列。每列表示一个应用于单个数据行的字段。例如,对于用户模型,一个用户可能有用户名、电子邮件和密码。您可以指定这些列应该是什么数据类型,以及Sequelize模型定义的每一列的任何其他必要信息。每行代表一个数据条目,或者在本例中代表一个用户。我之前构建了一个示例web应用程序,可以将学生映射到特定的班级;下面我复制了我为该项目编写的Sequelize模型定义。这很简单,如果您不熟悉这个库,我建议您观看一些YouTube教程或在Sequelize.org上查看Sequelize文档

Student.js


查看PostgreSQL或SQL,了解Sequelize的基本框架,也可能会有所帮助。

谢谢您的回答!我不知道;我不是有意粗鲁,但我没有看到其他用户问题的任何后续内容。我忘了提到使用的数据库是Mongo而不是SQL,对此我很抱歉。我已经声明了一个用户模式,我只是想减少重复代码,这只是我的一种奇怪的崇拜
'use strict';

const Sequelize = require('sequelize');
const db = require('./_db');

const Student = db.define('student', {
    name: {
        type: Sequelize.STRING,
        allowNull: false,
        validate: {
            notEmpty: true
        }
    },
    phase: {
        type: Sequelize.STRING,
        allowNull: true,
        validate: {
            isIn: [['junior', 'senior', null]]
        }
    }
});

Student.findByPhase = async function(phase) {
    const students = await Student.findAll({
        where: {
            phase: phase
        }
    })
    return students
}

module.exports = Student;