获取文件名作为请求参数

时间:2014-06-17 20:12:21

标签: node.js express pug

我尝试使用node.js加载文件。

在我看来,我有一个按钮:

doctype 5
html(ng-app="lineApp")
  head
    title= title
    link(rel='stylesheet', href='/stylesheets/style.css')
  body
    p filename: #{filename}
    button(onclick="location.href='/app/#{filename}'") click me

该页面显示带filename: C:\users\username\my filename.txt的段落。 当我点击按钮时,URL就像http://localhost:8080/app/C:usersusernamemy%20filename.txt

所以当我尝试检索参数

exports.appli = function (req, res) {
    var filename = req.params.filename;
    //....
    });
};

与服务器端呼叫:

app.get('/app/:filename?', routes.appli);

我的文件名无效。那我的问题是,如何将文件路径作为参数传递给URL?

1 个答案:

答案 0 :(得分:1)

这是斜杠充当转义字符的问题。

第一次将字符串传递给客户端时,任何转义斜杠(例如:c:\\users\\username\\my file.txt)都会转换为单斜杠。

使用href.location时,斜杠第二次作为转义字符 ...这就是为什么当您尝试使用它来调用服务器时它们会退出。

你可以:

  1. 创建两个变量以传递给jade模板,一个是文件名as-is,另一个是HTML编码的字符串
  2. 将变量传递给jade模板:
  3. 例如,根据您原来的玉石:

    body
        p filename: #{filename}
        button(onclick="location.href='/app/#{encodedFilename}'") click me