添加自定义中间件

时间:2018-01-23 17:27:09

标签: node.js express middleware

我的路线中req.param:groupIndex。我想将此索引作为中间件处理,以获得特定的ID。

节点和快递对我来说是新的,所以我可能会遗漏一些简单的东西,但阅读文档并查看其他实现似乎并不起作用。

知道我可能会出错吗?

// 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();
}

1 个答案:

答案 0 :(得分:2)

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

function myMiddleware(req, res, next)

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

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