空输入验证无效

时间:2014-01-18 13:03:49

标签: node.js coffeescript connect

我在尝试使用以下脚本验证输入时遇到了一些问题。

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
  • 连接版本:v2.12.0

1 个答案:

答案 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

希望有所帮助。