1

我正在使用express-form https://github.com/dandean/express-form

它是否有能力验证类型的输入file?我特别希望require有人上传文件。

编辑莱纳斯 :)

我试过了: field("pdf").required("pdf", "You must select a file to upload.")

问题是 this 正在寻找req.body.pdfnot req.files.pdf,所以它总是认为验证失败。

编辑/工作代码:根据 Linus 的回答,我做了什么让它工作。

我不仅需要配置dataSources参数,还需要检查字段的size属性,因为仅在required字段上执行 a 还不够好,因为即使文件输入为空,它仍然存在(元数据等)。所以相反,我做了一个自定义验证函数,确保pdf.size大于 0。在我的代码中,我还检查我是否有一个title. 我把它留在这里,以防有人想知道如何将多个验证串在一起。

var form = require('express-form')
  .configure({dataSources: ['body', 'files', 'query', 'params']});

form(
  field("pdf.size").custom(function(value) {
    if (value <= "0") {
      throw new Error("You must select a file to upload.");
    }
  })
 , field("title").trim().required("title", "Please enter a title for your PDF."))
4

1 回答 1

1

自述文件

Express Form 具有各种配置选项,但旨在为典型的 Express 应用程序提供合理的默认值。

...

dataSources (Array):一组 Express 请求属性,在过滤和验证数据时用作数据源。默认值:["body", "query", "params"].

所以沿着这些路线的东西应该可以解决问题:

var form = require('express-form')
           .configure({dataSources: ['body', 'files', 'query', 'params']});
于 2012-06-16T10:08:29.153 回答