通过从Node.js和Express.js中的前端请求数据来创建动态链接

回顾

这对我来说很难解释,但是我试图通过创建一个链接而不是50个链接来下载表单来缩短代码。我将尝试使用我的代码更好地解释这一点。

我有5个get请求,它们执行完全相同的操作,但下载了一个不同的文件。

router.get('/form1', function (req, res) {
    var file = __dirname + '/../public/forms/form1.pdf';
    res.download(file);
});

router.get('/form2', function (req, res) {
    var file = __dirname + '/../public/forms/form2.pdf';
    res.download(file); 
});
etc...

和我的前端链接是;

<a href="/downloads/form1">FORM 1</a>
<a href="/downloads/form2">FORM 2</a>
etc...

我能做些什么使它更具动态性吗?我唯一能想到的就是这样。

router.get('/:formName', function (req, res) {
    // some how do a "req.params.formName" 
    var file = __dirname + '/../public/forms/' + req.params.formName + '.pdf';
    res.download(file); // Set disposition and send it.
});

但是我不知道如何获得formName,或者那是否有可能。

赛隆零

这里有一些其他选项可以澄清:

  • 选项1:如果服务器上的文件夹具有相当可管理的目录结构,则只需使用express.static将物理文件夹映射到虚拟文件夹并自动下载:

    app.use('/download', express.static(path.join(__dirname, '/public/forms/')))
    

    只要该文件在服务器上您所映射的路径(即/ public / forms)中,这将导致来自前端的任何带有href ='/ download / something.pdf'的链接正常工作。

  • 选项2(上面的David E本质上回答了该问题):在您的原始代码中,如果您想为看起来像/ download / form1,/ download / form2的链接生成路径处理程序,这是一个非常小的修改:

    router.get('/download/:formNumber', function (req, res) {
        var file = __dirname + '/public/forms/' + req.params.formNumber + '.pdf';
        res.download(file);
    });
    
  • 选项3:您想要验证对文件的访问,并可能支持对单个处理程序的多种复杂URL方案,这些处理程序可以查找适当的物理路径并发送文件:

    router.get('/download/:path[forms|images|files]/:formNumber1', fileRequestHandler);
    router.get('/public/downloadFolder2/:formNumber2', fileRequestHandler);
    router.get('/public/downloadFolder3/:formNumber3', fileRequestHandler);
    function fileRequestHandler(req, res) {
        // Check authentication here - example below from Passport
        if(!req.isAuthenticated()) 
            return res.status(401).send({err: 'Unauthorized'});
    
        // Check which form number is supplied and map to appropriate physical file
        if(req.params.formNumber1) {
            // in this example, req.params.path can be one of three allowed sample values - forms or images or files
            var file = __dirname + '/public/' + req.params.path + '/' + req.params.formNumber + '.pdf';
            res.download(file);
        } else if(req.params.formNumber2) {
            // etc.
        }
    }
    

注意:Ezra Chang关于路径有效性的观点很重要。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

无法在Node.js(Express)中提取请求数据

来自分类Dev

使用 Node Js 和 express 调用来自 rest api 的 post 请求时出错。请求数据变空

来自分类Dev

使用Node JS和Express JS的HTTPS请求缓慢?

来自分类Dev

Node.js Javascript和Express

来自分类Dev

Node.js / Express和并行队列

来自分类Dev

Node Express失败加载CSS和JS

来自分类Dev

Node.js和Express错误

来自分类Dev

Node.js Javascript和Express

来自分类Dev

通过Express从Node.js获取数据

来自分类Dev

使用node.js / express和AngularJS的CORS请求

来自分类Dev

Node.js + express.js和线程安全

来自分类Dev

Node.js框架和Express.js

来自分类Dev

Node.js + express.js和线程安全

来自分类Dev

通过express js和vuejs服务不同的本地json数据

来自分类Dev

使用猫鼬和Express / Node Js提取数据

来自分类Dev

是否可以使用Node.js和Express通过request.query传递对象数组?

来自分类Dev

通过Webpack服务/监控的React UI和Node.js / Express应用程序

来自分类Dev

通过从链接中引入 URL 来创建脚本

来自分类Dev

app.js中定义的变量是否可以通过Express和node js中的路由功能访问?

来自分类Dev

在app.js中定义的变量是否可以通过Express和node js中的路由功能访问?

来自分类Dev

Node.js和Express中的活动菜单项

来自分类Dev

使用Express和Passport JS重定向Node中的路由

来自分类Dev

Node.js Express express.json和express.urlen用表单提交编码

来自分类Dev

Node.JS请求数据长度小于Content-Length中给出的长度

来自分类Dev

Node.js 和 express Rest api 来创建自定义字段路由

来自分类Dev

以响应方式将后端(通过Node.js中Express服务器上的Mongoose通过MongoDB链接到MongoDB)以响应方式链接到前端(Bootstrap或Foundation)?

来自分类Dev

有没有办法通过从远程URL下载pdf文件来合并PDF文件,而无需使用node js将其保存在我的服务器上?

来自分类Dev

HTML, JS - 通过从 HTML 到 JS 调用 <div> 来显示循环的输出

来自分类Dev

在Node.js和Express-Session中更改和刷新会话数据

Related 相关文章

  1. 1

    无法在Node.js(Express)中提取请求数据

  2. 2

    使用 Node Js 和 express 调用来自 rest api 的 post 请求时出错。请求数据变空

  3. 3

    使用Node JS和Express JS的HTTPS请求缓慢?

  4. 4

    Node.js Javascript和Express

  5. 5

    Node.js / Express和并行队列

  6. 6

    Node Express失败加载CSS和JS

  7. 7

    Node.js和Express错误

  8. 8

    Node.js Javascript和Express

  9. 9

    通过Express从Node.js获取数据

  10. 10

    使用node.js / express和AngularJS的CORS请求

  11. 11

    Node.js + express.js和线程安全

  12. 12

    Node.js框架和Express.js

  13. 13

    Node.js + express.js和线程安全

  14. 14

    通过express js和vuejs服务不同的本地json数据

  15. 15

    使用猫鼬和Express / Node Js提取数据

  16. 16

    是否可以使用Node.js和Express通过request.query传递对象数组?

  17. 17

    通过Webpack服务/监控的React UI和Node.js / Express应用程序

  18. 18

    通过从链接中引入 URL 来创建脚本

  19. 19

    app.js中定义的变量是否可以通过Express和node js中的路由功能访问?

  20. 20

    在app.js中定义的变量是否可以通过Express和node js中的路由功能访问?

  21. 21

    Node.js和Express中的活动菜单项

  22. 22

    使用Express和Passport JS重定向Node中的路由

  23. 23

    Node.js Express express.json和express.urlen用表单提交编码

  24. 24

    Node.JS请求数据长度小于Content-Length中给出的长度

  25. 25

    Node.js 和 express Rest api 来创建自定义字段路由

  26. 26

    以响应方式将后端(通过Node.js中Express服务器上的Mongoose通过MongoDB链接到MongoDB)以响应方式链接到前端(Bootstrap或Foundation)?

  27. 27

    有没有办法通过从远程URL下载pdf文件来合并PDF文件,而无需使用node js将其保存在我的服务器上?

  28. 28

    HTML, JS - 通过从 HTML 到 JS 调用 <div> 来显示循环的输出

  29. 29

    在Node.js和Express-Session中更改和刷新会话数据

热门标签

归档