我定义了以下路线:
router.post('/select', function(req, res, next){
var sql = "SELECT metadocid, col1, col2, col3 FROM mdt1 where ";
var metadocid = req.body.metadocid;
var op1 = req.body.op1;
if (metadocid !== "") {
var opm = req.body.op1;
switch (opm){
case "equals":
opm = "=";
break;
}
var sel1 = "metadocid " + opm + " " + metadocid;
}
sql = sql + sel1;
console. log('Send sql: ' + sql );
async.waterfall(
[
function(callback) {
fs.writeFile('message.txt', sql, callback);
}
], function (err) {
if(err) return console.log(err);
console.log('Appended text!');
});
next();
});
router.get('/documents', function(req,res){
handleAllDepartments(1);
res.sendFile(__dirname + '/docs.html');
});
app.use('/',router);
但是从router.post(' / select')它没有启动router.get(' / documents')。如果我在浏览器中输入路线/文件 该程序继续运行。 我希望程序自动从router.post(' / select')继续到router.get(' / documents')。
请帮忙!
提前谢谢!
答案 0 :(得分:0)
Express中的路由点是,如果你打电话,例如POST /select
,路由器将仅调用分配给此功能的功能,并且仅调用此请求。这意味着next()
的使用不会将执行传递给例如GET /select
或POST /documents
或GET /documents
,因为这些请求不同。
在Express中有一个名为use
的方法,可以让您在不关心方法和地址的情况下捕获每个请求。它当然也允许使用next()。
总而言之,您必须为评论中描述的每一个(这很多)调用4个单独的请求,或者只是发出一个请求来处理您将要在4个路由器中执行的所有操作。
答案 1 :(得分:0)
我从你的代码中不清楚为什么你这样做。您似乎正在尝试将某些数据发布到文件中,然后将单独的文档发送到客户端。这是一个稍微不常见的工作流程,但肯定是可行的。
在像REST这样的RESTful架构中处理POST的更常见的方法是在一个处理程序中执行POST,并通过重定向到新POST的资源进行响应,然后客户端将使用GET单独请求
也就是说,如果您确实有一个工作流程,您首先发布一些数据,然后想要调用其他函数来处理响应,那么您可以在路由上使用多个处理程序,如下所示:
function receiveDocData(req,res,next){
var sql = "SELECT metadocid, col1, col2, col3 FROM mdt1 where ";
var metadocid = req.body.metadocid;
var op1 = req.body.op1;
if (metadocid !== "") {
var opm = req.body.op1;
switch (opm){
case "equals":
opm = "=";
break;
}
var sel1 = "metadocid " + opm + " " + metadocid;
}
sql = sql + sel1;
console. log('Send sql: ' + sql );
async.waterfall(
[
function(callback) {
fs.writeFile('message.txt', sql, callback);
}
], function (err) {
if(err) return console.log(err);
console.log('Appended text!');
});
next();
}
}
function doTheNextThing(req,res){
handleAllDepartments(1);
res.sendFile(__dirname + '/docs.html');
}
router.post('/select', receiveDocData, doTheNextThing);
router.get('/documents', doTheNextThing);
app.use('/',router);
请注意,我离开了' / documents'根据您的设置假设您希望让它独立于原始' / select'中的操作。处理程序。