2014-01-18 40 views
1

我一直有几个问题试图让下面的脚本来验证输入。空输入验证不起作用

app = connect() 
.use(connect.bodyParser()) #So we can get the post data. 
.use(req,res) -> 
    valid = false if (req.body.name is "") or (req.body.question is "") or (req.body.email is "") #Was all the data submitted? 

    if valid 
     #process request 

http.createServer(app).listen(1407) 

为了调试我已经使用的console.log列出的投入,它返回两个输入,一个用正确的数据,另一个undefined

我以前使用req.body.name?为好,但它仅重写为req.body.question != null而不检查未定义。

HTML表单

<form action="_serverurl_" method="post"> 
    <input type="text" placeholder="Your Name" name="name"> 
    <input type="text" placeholder="Your Email" name="email"> 
    <input type="text" placeholder="Subject" name="subject"> 
    <textarea name="question" placeholder="Question"></textarea> 
    <div class="right"><input type="submit" class="submit" name="submit" value="Send"></div> 
</form> 

的部分混淆我最深的是为什么有两个输入到服务器?

调试信息:

  • 节点版本:v0.10.21
  • Connect版本:v2.12.0

回答

1

其实我不明白为什么你的代码是行不通的,但一种方法可能会将其分解为更小的可管理组件。 验证您可以定义一个函数,它允许您确定字段是否有效(请参阅下面的isFieldValid)。

isFieldValid = (field) -> field? and field.length > 0 

app = connect() 
.use(connect.bodyParser()) #So we can get the post data. 
.use (req,res) -> 
    # pickup the body vars first to ease reading 
    {name, email, subject, question} = req.body 
    # valid should be always defined, even if it's only true/false 
     # Was all the data submitted? 
    valid = isFieldValid(name) and isFieldValid(email) and isFieldValid(question) 
    if valid 
     # process request 
    else 
     # handle invalid data 
     res.send(400, ...) 

如果你正在寻找一个更详尽的验证库,我建议Validator

希望有所帮助。

+0

完美地工作,我不知道为什么它从来没有。 我也没有意识到你可以使用'{name,etc} = req.body'来引用创建变量,真正的帮助!谢谢! – Daniel

+1

@Daniel手册中的[解构作业](http://coffeescript.org/#destructuring)部分可能会对您有所帮助。 –

+1

男性在问题和答案中都使用了最后的'.use('语句缺少其''''')。如果你在互联网上留下这个,你可能会打破Google。 (我会放下'('因为唯一/最后一个参数是一个回调函数。) – joeytwiddle