2011-09-29 4 views
14

Express 및 Mongoose로 양식 유효성 검사를 어떻게 처리합니까? 사용자 정의 메소드, 일부 플러그인 또는 기본 오류 배열을 사용하고 있습니까?Node.js + Express + Mongoose + Jade에서 중첩 모델의 경우 특히 양식 유효성 검사를 어떻게 처리합니까?

매우 간단한 유효성 검사를 위해 기본 오류 배열을 사용할 수 있지만이 방법은 중첩 모델이있는 시나리오에서 폭발적으로 보입니다.

답변

18

사용자의 입력 필드가 모두 올바른지 확인하기 전에 개인적으로 node-validator을 사용하여 몽구스에 표시하기도합니다.

노드 유효성 검사기는 사용자에게 표시 될 수있는 모든 오류 목록을 만드는 데 유용합니다.

+0

나는 그것을 보지 못했다. 고마워. 나는 밸리데이션이 라우트/컨트롤러 로직에 너무 가깝게 묶여있는 것을 좋아하지 않는다. 니가 너 자신을 반복해서 끝내는 것 같아. – Chance

+2

유효성 검사를 어디에서 처리 하시겠습니까? 컨트롤러/라우트는 시스템에 들어가는 데이터의 "진입 점"이기 때문에 올바른 위치에 있습니다. 이를 모델로 오프로드 할 수 있지만 모델은 데이터 지속성/검색에 대해 걱정합니다. 컨트롤러/경로가 가장 좋습니다. – jcolebrand

+5

대부분의 도메인 기반 디자인에서 모델은 비즈니스 논리, 데이터 무결성 및 규칙 유효성 검사와 관련이 있으며 다른 플레이어 (및 그 자체도)는 데이터 지속성/검색과 관련이 있습니다. 모델이 데이터 부분을 처리한다는 것을 알고 있지만 유효성 검사도 처리해야한다고 생각합니다. 나는 정말로 그것을 그것들에 "내리는"것으로 생각하지 않을 것이다. – Chance

14

몽구스에는 검증 미들웨어가 있습니다. 스키마 항목에 대한 유효성 검사 함수를 개별적으로 정의 할 수 있습니다. 중첩 된 항목도 유효성을 검사 할 수 있습니다. 또한 asyn 유효성 검사를 정의 할 수 있습니다. 자세한 내용은 mongoose page을 확인하십시오.

var mongoose = require('mongoose'), 
    schema = mongoose.Schema, 
    accountSchema = new schema({ 
     accountID: { type: Number, validate: [ 
     function(v){ 
      return (v !== null); 
     }, 'accountID must be entered!' 
     ]} 
    }), 
    personSchema = new schema({ 
     name: { type: String, validate: [ 
     function(v){ 
      return v.length < 20; 
     }, 'name must be max 20 characters!'] 
     }, 
     age: Number, 
     account: [accountSchema] 
    }), 
    connection = mongoose.createConnection('mongodb://127.0.0.1/test'); 
    personModel = connection.model('person', personSchema), 
    accountModel = connection.model('account', accountSchema); 

... 
var person = new personModel({ 
    name: req.body.person.name, 
    age: req.body.person.age, 
    account: new accountModel({ accountID: req.body.person.account }) 
}); 
person.save(function(err){ 
    if(err) { 
    console.log(err); 
    req.flash('error', err); 
    res.render('view'); 
    } 
... 
}); 
+0

그래,하지만 PersonSchema = new Schema ({account : AccountSchema})와 같은 사람이라면; AccountSchema가 유효성 검사를 수행하는 경우 오류가 발생하지 않습니다. – Chance

+0

이 방법으로 작동합니다 :) – Erhan

+0

Stephen : 백본의 모델 유효성 검사가 클라이언트 측에서 사용될 수 있습니다. 그러나 다소 혼란스럽고 혼합 된 클라이언트/서버 측 코드가 될 수 있습니다. [Dailyjs는 그것에 대해 썼습니다] (http://dailyjs.com/2011/04/04/node-tutorial-19/) – Erhan

5

나는 검증을 위해 express-form 미들웨어를 사용합니다. 필터 기능도 있습니다. 노드 유효성 검사기를 기반으로하지만 표현에 대한 추가 보너스가 있습니다. 요청 객체에 속성이 유효한지 여부를 나타내는 속성을 추가하고 오류 배열을 반환합니다.

Express를 사용하는 경우이 방법을 사용합니다.

+1

Chaz, 표현 형식의 위생 방법으로 중첩 된 데이터에 액세스하는 좋은 방법이 있습니까? –

관련 문제