Program Tip

Express를 사용하여 동적 경로에서 정적 파일 제공

programtip 2020. 11. 24. 19:26
반응형

Express를 사용하여 동적 경로에서 정적 파일 제공


나는 일반적으로 수행되는 정적 파일을 제공 express.static(static_path)하지만 일반적으로 수행 되는 동적 경로에서

app.get('/my/dynamic/:route', function(req, res){
    // serve stuff here
});

개발자 중 한 명이이 의견 에서 해결책을 암시 했지만 그가 의미하는 바는 즉시 명확하지 않습니다.


괜찮아. Express의 응답 객체 에 대한 소스 코드에서 예제를 찾았습니다 . 이 예제는 약간 수정 된 버전입니다.

app.get('/user/:uid/files/*', function(req, res){
    var uid = req.params.uid,
        path = req.params[0] ? req.params[0] : 'index.html';
    res.sendFile(path, {root: './public'});
});

res.sendFile방법을 사용합니다 .

참고 : 옵션 sendFile사용 요구하도록 보안이 변경됩니다 root.


아래 코드를 사용하여 다른 URL에서 요청한 동일한 정적 파일을 제공합니다.

server.use(express.static(__dirname + '/client/www'));
server.use('/en', express.static(__dirname + '/client/www'));
server.use('/zh', express.static(__dirname + '/client/www'));

귀하의 경우는 아니지만 여기에 온 다른 사람들에게 도움이 될 수 있습니다.


이것은 작동합니다.

app.use('/my/dynamic/:route', express.static('/static'));
app.get('/my/dynamic/:route', function(req, res){
    // serve stuff here
});

문서에는 app.use()작동 하는 동적 경로가 나와 있습니다. 참조 https://expressjs.com/en/guide/routing.html를


다음을 사용 res.sendfile하거나 계속 활용할 수 있습니다 express.static.

const path = require('path');
const express = require('express');
const app = express();

// Dynamic path, but only match asset at specific segment.
app.use('/website/:foo/:bar/:asset', (req, res, next) => {
  req.url = req.params.asset; // <-- programmatically update url yourself
  express.static(__dirname + '/static')(req, res, next);
});         

// Or just the asset.
app.use('/website/*', (req, res, next) => {
  req.url = path.basename(req.originalUrl);
  express.static(__dirname + '/static')(req, res, next);
});

참고 URL : https://stackoverflow.com/questions/11569181/serve-static-files-on-a-dynamic-route-using-express

반응형