我正在使用express在node.js中制作一个web应用程序。这是对我所拥有的东西的简化:
var express = require('express');
var jade = require('jade');
var http = require("http");
var app = express();
var server = http.createServer(app);
app.get('/', function(req, res) {
// Prepare the context
res.render('home.jade', context);
});
app.post('/category', function(req, res) {
// Process the data received in req.body
res.redirect('/');
});
我的问题是:
如果我发现在/category中发送的数据不有效,我想向/页传递一些额外的上下文。我怎么能这样做呢?重定向似乎不允许任何类型的额外参数。
你可以通过查询字符串传递少量的键/值对数据:
res.redirect('/?error=denied');
主页上的javascript可以访问它并相应地调整它的行为。
注意,如果你不介意/category作为浏览器地址栏中的URL,你可以直接渲染而不是重定向。恕我直言,很多时候人们使用重定向,因为旧的web框架使直接响应变得困难,但表达起来很容易:
app.post('/category', function(req, res) {
// Process the data received in req.body
res.render('home.jade', {error: 'denied'});
});
@Dropped.on。Caprica评论说,使用AJAX消除了URL更改问题。
使用app.set & app.get
设置数据
router.get(
"/facebook/callback",
passport.authenticate("facebook"),
(req, res) => {
req.app.set('user', res.req.user)
return res.redirect("/sign");
}
);
获取数据
router.get("/sign", (req, res) => {
console.log('sign', req.app.get('user'))
});
你可以通过查询字符串传递少量的键/值对数据:
res.redirect('/?error=denied');
主页上的javascript可以访问它并相应地调整它的行为。
注意,如果你不介意/category作为浏览器地址栏中的URL,你可以直接渲染而不是重定向。恕我直言,很多时候人们使用重定向,因为旧的web框架使直接响应变得困难,但表达起来很容易:
app.post('/category', function(req, res) {
// Process the data received in req.body
res.render('home.jade', {error: 'denied'});
});
@Dropped.on。Caprica评论说,使用AJAX消除了URL更改问题。
我发现的最简单的方法是在routeHandlers之间传递数据来使用next(),不需要干扰重定向或会话。
可选地,您可以只调用您的homeCtrl(req,res)而不是next(),只传递req和res
var express = require('express');
var jade = require('jade');
var http = require("http");
var app = express();
var server = http.createServer(app);
/////////////
// Routing //
/////////////
// Move route middleware into named
// functions
function homeCtrl(req, res) {
// Prepare the context
var context = req.dataProcessed;
res.render('home.jade', context);
}
function categoryCtrl(req, res, next) {
// Process the data received in req.body
// instead of res.redirect('/');
req.dataProcessed = somethingYouDid;
return next();
// optionally - Same effect
// accept no need to define homeCtrl
// as the last piece of middleware
// return homeCtrl(req, res, next);
}
app.get('/', homeCtrl);
app.post('/category', categoryCtrl, homeCtrl);