Node.js + Express.js + Passport.js – 我需要一些build议如何构build它们

我发现这个教程关于scotch.io上的 Node.js + Express.js + Passport.js 教程

我需要一些build议。

1)本地注册检查input数据

在这个例子中,没有检查input数据的login或注册,例如检查电子邮件是空的或无效的,或添加一个validation码控制,所以,如果我需要添加他们在哪里是更好的位置?

里面passport.js?

里面routes.js?

在其他文件?

2)注册POST和GET

在这个例子中,我有两个路由,一个GET呈现表单,一个POST来处理表单提交。

我想,我错误的情况下,呈现错误信息的forms,但也与所有input文字填写input的数据。

如果我检查POST路由里面的input数据,当我redirect到GET路由,我需要通过它所有的错误消息,也提交的值。

我用req.flash做到这一点?

在同一个函数中更好地处理GET和POST?

还有另一种(更好的)方法来做到这一点?

谢谢大家的build议和帮助

要回答问题1) ,由于您所谈论的额外表单validation不是护照stream程的一部分,因此我build议将其保存在自己的中间件中,与config/passport.js分开。 你可以定义你的函数类似于已经存在的isLoggedIn助手。 喜欢这个:

 function validateSignup(req, res, next) { // Perform your field validation and/or CAPTCHA checking here if (!verifyCaptcha(req.body)) { return res.status(401).end(); } next(); } app.post('/signup', validateSignup, passport.authenticate('local-signup', { successRedirect : '/profile', // redirect to the secure profile section failureRedirect : '/signup', // redirect back to the signup page if there is an error failureFlash : true // allow flash messages })); 

对于2)及以后,

我想,我错误的情况下,呈现错误信息的forms,但也与所有input文字填写input的数据。

简单的方法来实现这个我认为将发出您的注册/loginPOST作为一个AJAX请求,而不是做一个传统的表单提交,并让您的POST路由返回一个JSON结果,而不是呈现一个HTML页面。 这样你的页面不会刷新,你的表单值将保持原样。 粗糙的笔触,使用jQuery你的客户端代码可能看起来像这样:

 $("#signup-form").submit(function(e){ // Prevents your form from submitting as usual e.preventDefault(); $.post('/signup', $('#theform').serialize()) .done(function() { // Success! Navigate to home page }) .fail(function(jqXHR, textStatus, errorThrown) { // Show error in UI }); }); 

为了突出UI中的表单错误,这是一个完整的故事,取决于你使用的是什么框架。 例如,如果你使用bootstrap,我会推荐bootstrapValidator 。

在同一个函数中更好地处理GET和POST?

不,我肯定会把这些路线分开。 此外,如果你select遵循上面的AJAXbuild议,我觉得更容易,如果我在我的JSON路由单独的path下组织我的HTML服务路线。 例如,如果我有一个显示注册页面的signuppath和一个注册registry单的JSON端点,我会像这样组织它:

GET /signup

POST /api/signup