我一直在使用NodeJS来创建REST API服务。我不需要渲染任何网页或'ejs'文件。
考虑到这一点,我需要知道是否有一个arquitecture来保存JSON模板,比如'views'文件夹,用于存储'.ejs'模板,以便将它们用作响应,让我们说一个配置文件。
另外,我一直在使用护照模块对用户进行身份验证,我无法将Flash消息传递给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模板进行响应以响应Flash消息。
我该怎么做?
答案 0 :(得分:1)
也许你需要使用JSON.stringify()
例如
app.get('/loginerr', function(req, res, next){
res.setHeader('Content-Type', 'application/json');
res.end(`{error:${req.flash('error')}}`)
});
祝你好运