添加自定义中间件
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)
其中req
、res
、next
都是从Express本身传入的。您不调用该函数,只需将其作为参数 (higher-order functions) 传递给您的路由定义:
router.get('/person/:groupIndex(\d+)', myMiddleware, ...)
我有一条路线 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)
其中req
、res
、next
都是从Express本身传入的。您不调用该函数,只需将其作为参数 (higher-order functions) 传递给您的路由定义:
router.get('/person/:groupIndex(\d+)', myMiddleware, ...)