2014-01-18 80 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