可以使用表单validationinputtypes的“文件”是否需要?
我使用express-form
https://github.com/dandean/express-form
它是否有能力validationtypesfile
的input? 我特别想require
有人上传文件。
编辑林纳斯:)
我试过: field("pdf").required("pdf", "You must select a file to upload.")
问题是这是寻找req.body.pdf
而不是req.files.pdf
,所以它总是认为validation失败。
编辑/工作代码:根据Linus的回答,我做了什么来实现它。
我不仅需要configurationdataSources
参数,还需要检查字段的size
属性,因为只是在字段上做了required
就不够好,因为即使文件input为空,它仍然存在(元数据等)。 所以相反,我做了一个自定义validation函数,确保pdf.size
大于0.在我的代码中,我也检查是否有title
。 我留在这里,以防万一有人想知道如何把多个validation串起来。
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."))
从自述文件 :
Express Form有各种configuration选项,但是针对典型Express应用程序的合理默认设置。
…
dataSources(Array):用于过滤和validation数据时用作数据源的Express请求属性数组。 默认值:
["body", "query", "params"]
。
所以,沿着这些线应该做的伎俩:
var form = require('express-form') .configure({dataSources: ['body', 'files', 'query', 'params']});