2016-11-04 8 views
0

私はNodeJSを使用してREST APIサービスを作成しています。 Webページやejsファイルをレンダリングする必要はありません。NodeJSでレスポンスとしてJSONをレンダリング

これを念頭に置いて、JSONテンプレートを '.ejs'テンプレートを保存するための 'views'フォルダのように保存するアーキテクチャがあるかどうかを知る必要があります。

また、私は、ユーザーを認証するためにパスポートモジュールで働いていると私は、JSON応答にフラッシュメッセージを渡すことはできません、これまでのところ、これは、それがどのように見えるかです:

passport.use('local.signup', new LocalStrategy({ 
    usernameFiled : 'email', 
    passwordField : 'password', 
    passReqToCallback : true 
}, function(req, res, password, done){ 
    User.findOne({'email' : email}, function(err, user){ 
     if (err) 
      return done(err); 
     if (user) 
      return done(null, false, {message : 'Email already in use'}); 
     var newUser = new User(); 
     newUser.email = email; 
     newUser.password = newUser.encryptPassword(password); 
     newUser.save(function(err, result){ 
      if (err) 
       return done(err); 
      return done(null, newUser); 
     }); 
    }); 

})) ; 

そして、これは私のルーティングです:

app.post('/signup', passport.authenticate('local.signup', { 
    successRedirect : '/me', 
    failureRedirect : '/loginerr', 
    failerFlash : true 
})); 

/*===== SECURE ==== */ 

app.get('/me', function(req, res, next){ 
    res.end('Welcome user'); 
}); 

/* ========== Errors ====================== */ 

app.get('/loginerr', function(req, res, next){ 
    var message = req.flash('error'); 
    res.setHeader('Content-Type', 'application/json'); 
    res.json({'error' : 'email already taken'}); //Here i should use the flash message instead. 
}); 

ユーザーがサインアップしたときにエラーが発生すると、/ loginerr getにリダイレクトされます。代わりに、JSONのテンプレートで応答してフラッシュメッセージで応答したい。

どうすればいいですか?

答えて

1

たぶん、あなたは一例

app.get('/loginerr', function(req, res, next){ 
    res.setHeader('Content-Type', 'application/json'); 
    res.end(`{error:${req.flash('error')}}`) 
}); 

幸運のためJSON.stringify()

を使用する必要がありますすることができます

関連する問題