由于文件结构,中间件无法工作

问题描述 投票:0回答:1

我正在学习中间件教程,并且创建了将访问的 url 记录到控制台的中间件。当我在同一个文件中创建 2 个端点并使用中间件时,它会按预期记录访问控制台的 url。我决定为每个端点创建一个文件,但中间件不起作用。我认为这可能是由于文件结构造成的。我的背景是 Java,但涉足 Typescript。本应在浏览器中显示的消息也没有显示。我的目标是将消息显示到浏览器并将访问的网址显示到控制台。

索引.ts

import express from 'express';
import logger from './utilities/logger';
import route from './routes/index'

const app = express();
const port = 3002;

app.use('/sport', route)

// start the Express server
app.listen(port, () => {
  console.log(`server started at http://localhost:${port}`);
});

记录器.ts

import express from 'express';

const logger = (req: express.Request, res: express.Response, next: Function): 
void => {
    const url = req.url;
    console.log(`${url} was visited - hello`);
    // next();
}

export default logger;

路线/index.ts

import express from 'express';
import football from './api/football'
import basketball from './api/basketball'
import skiing from './api/skiing'

const route = express.Router();

route.get('/', (_req, _res) => {
    _res.send("Main route file");
});

route.use('/basketball', basketball);
route.use('/football', football);
route.use('/skiing', skiing);

export default route;

篮球.ts

import express from 'express';
import logger from '../../utilities/logger';

const route = express.Router();

route.get('/', logger,(_req, _res) => {
    _res.send('bball!');
});

export default route;

足球.ts

import express from 'express';
import logger from '../../utilities/logger';

const route = express.Router();

route.get('/', logger,(_req, _res) => {
    _res.send('footie!');
});

export default route;

文件结构

enter image description here

控制台输出

enter image description here

node.js typescript express logging middleware
1个回答
0
投票

Expressjs 文档甚至没有记录

Request.url
Request
属性。他们在文档中非常清楚地指出:

Request.url
不是原生 Express 属性,它是从 Node 的 http 模块继承的。

不清楚您为何登录

Request.url
Request.originalUrl
很像
Request.url
;但是,它保留了原始请求 URL。这就是你所需要的。它在中间件和路由器对象中都可用。

const logger = (req: express.Request, res: express.Response, next: Function): void => {
    const url = req.originalUrl;
    /* •••Rest of code••• */
}
© www.soinside.com 2019 - 2024. All rights reserved.