在NodeJS中将JSON渲染为响应

时间:2016-11-04 19:00:13

标签: node.js flash render passport.js

我一直在使用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消息。

我该怎么做?

1 个答案:

答案 0 :(得分:1)

也许你需要使用JSON.stringify()

例如

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

祝你好运