在 NodeJS 中渲染 JSON 作为响应

Render JSON as response in NodeJS

我一直在使用 NodeJS 创建 REST API 服务。我不需要呈现任何网页或 'ejs' 个文件。

考虑到这一点,我需要知道是否有一个结构来保存 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 的模板来响应即显信息。

我怎么能这样做?

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

例如

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

祝你好运