Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 添加自定义中间件_Node.js_Express_Middleware - Fatal编程技术网

Node.js 添加自定义中间件

Node.js 添加自定义中间件,node.js,express,middleware,Node.js,Express,Middleware,我有一个路由,其中包含请求参数:groupIndex。我希望将此索引作为中间件处理,以获得特定的id Node和express对我来说是新手,所以我可能错过了一些简单的东西,但阅读文档和查看其他实现似乎不起作用 你知道我哪里会出错吗 // routes.js const express = require("express"); const router = express.Router(); const customMiddleware = ('./customMiddleware.js'

我有一个路由,其中包含
请求参数
: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();
}
我将回顾该指南,但通常所有中间件功能都有以下特征:

function myMiddleware(req, res, next)
其中
req
res
next
是从Express本身传入的。您不调用该函数,只需将其作为参数()传递给路由定义:

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