`express.static`在`express-promise-router`内部不起作用

时间:2019-01-21 09:15:27

标签: node.js express promise

我正在尝试在我的Express应用中重构某些静态路由。

首先,如果我确实在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;

请注意,我已经将目录结构从../更改为../..,但是在尝试访问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>

为什么会这样?如何解决呢?谢谢

1 个答案:

答案 0 :(得分:0)

此行(在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()创建路由器即可。

有关更多信息,请参见routing docs

相关问题