在 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')}}`)
});
祝你好运
我一直在使用 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')}}`)
});
祝你好运