首页 > 解决方案 > `express.static`在`express-promise-router`中不起作用

问题描述

我正在尝试在我的快速应用程序中重构某些静态路由。

首先,如果我在里面跟随index.ts它会工作得很好

import * as express from 'express';
const app = express();
app.use('/something', express.static(path.join(__dirname, '../', 'something')));

但是我想让我的代码更整洁,所以我需要重构为单独的路由处理程序文件,即我创建route/something.ts用于处理路由到/something. 所以我做了以下事情:

在里面index.ts,它变成:

import * as express from 'express';
const app = express();
app.use('/something', require('./route/something.ts);

和里面./route/something.ts

import * as express from 'express';
import PromiseRouter from 'express-promise-router';
const router = PromiseRouter();
router.route('/')
                .get(express.static(path.join(__dirname, '../../', 'something')));
module.exports = router;

请注意,我已经将 dir 结构从../to更改为,../..但在尝试访问 api 端点时它仍然无法正常工作,localhost:3000/something/static.jpg它返回错误

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8">
        <title>Error</title>
    </head>
    <body>
        <pre>Cannot GET /something/static.jpg</pre>
    </body>
</html>

为什么会这样?如何解决这个问题?谢谢

标签: node.jsexpresspromise

解决方案


此行(在 中route/something.ts):

router.route('/')
                .get(express.static(path.join(__dirname, '../../', 'something')));

应改为:

router.use('/', express.static(path.join(__dirname, '../../', 'something')));

你也不需要使用express-promise-router,你可以使用创建路由器const router = express.Router()

有关这方面的更多信息,请参阅路由文档


推荐阅读