添加自定义中间件

Adding custom middleware

我有一条路线 req.param:groupIndex。我想将这个索引作为中间件处理以获得特定的 id。

Node 和 express 对我来说是新的,所以我可能遗漏了一些简单的东西,但阅读文档和查看其他实现似乎没有用。

知道我可能哪里出错了吗?

// routes.js
const express = require("express");  
const router = express.Router();
const customMiddleware = ('./customMiddleware.js');
const db = require('./mysqlCon.js');

router.get('/person/:groupIndex(\d+)', customMiddleware(), function (req, res) {

let id = req.params.id;
let query = `
            SELECT 
                *
            FROM 
                data
            WHERE 
                id = ?
        `;
        let query_params = [id];
        db.query(
            query, 
            query_params, 
            function(error, result, fields) {
                if ( result.length == 1 ) {
                    res.status(200).json( result[0] );
                } else {
                    res.status(401).json({});
                }
            }
        );
});





// customMiddleware.js
const db = require('./mysqlCon.js');

module.exports = (req, res, next) => {

    let groupIndex =  parseInt(req.params.groupIndex);
    let query = `
            SELECT 
                id
            FROM 
                listofids
            LIMIT 1 
            OFFSET ?
    `;
    let query_params = [groupIndex];
    db.query(
        query, 
        query_params, 
        function(error, result, fields) {
            if ( result.length == 1 ) {
                req.params.id = result[0].id;
            } else {
                res.status(401).json({});
            }
        }
    );
    next();
}

我会查看 middleware 指南,但通常所有中间件函数都具有以下签名:

function myMiddleware(req, res, next)

其中reqresnext都是从Express本身传入的。您不调用该函数,只需将其作为参数 (higher-order functions) 传递给您的路由定义:

router.get('/person/:groupIndex(\d+)', myMiddleware, ...)