在api服务器中更改req对象?
我最近选择了一个拥有开发团队的客户。我正在开发一个已经开发的网站,并且遇到了一些对我来说有点奇怪的事情。
我总是认为在路由处理中混淆请求对象本质上是不好的(我在这里可能完全错误)。
下面的代码让我感到困惑,因为我不确定为什么他们将req.query.msg分配给某个东西而不是仅仅创建一个变量并在ejs页面渲染上传递它。
/********************************************************
* *
* CHANGE PASSWORD ROUTE THAT POSTS THE NEW PASSWORD TO *
* DATABASE. *
* *
********************************************************/
app.post('/client/password', function (req, res) {
var url = URLS.ClientChangePW;
if(req.session.securityquestions[0].SSN !== "null" || req.session.securityquestions[0].SSN !== "undefined"){
if(req.body.pwd !== req.body.pwdconf){
res.redirect('/client/changePassword' + config.PWD_MISMATCH);
} else {
var ssn = req.session.securityquestions[0].SSN;
while(ssn.length < 9){
ssn = "0" + ssn;
}
url = url.replace("@ssn", ssn);
url = url.replace("@newpw", req.body.pwd);
}
request.put(url, function (err, xres, body) {
var data = JSON.parse(body);
if(data.status === 200){
email(req.session.securityquestions[0].EMAIL, "none", "forgotpw", function(result){
if(result){
req.query.msg = "Your password has been reset.";
} else {
req.query.msg = "Request unsuccessful. Please call number here for assistance.";
}
res.render('pages/login', {
session: req.session,
msg: req.query.msg
});
});
} else {
req.query.msg = "Request unsuccessful. Please call number here for assistance.";
res.render('pages/login', {
session: req.session,
msg: req.query.msg
});
}
});
}
});
再一次,我从未真正搞过req对象,所以我可能错了。我一直认为客户端设置了请求,我们使用它来发送响应。
回答如下:我不确定为什么他们将req.query.msg分配给某个东西而不是仅仅创建一个变量并在ejs页面渲染上传递它。
似乎没有任何理由在这里分配req.query.msg
财产。如果这是我的代码,我将使用一个单独的局部变量。
再一次,我从未真正搞过req对象,所以我可能错了。我一直认为客户端设置了请求,我们使用它来发送响应。
虽然这不是这里发生的事情,但在Express开发中常常使用中间件在req
对象上为请求处理程序设置状态,以便在路由堆栈中使用。 req
对象是规范对象,您在处理请求时保持特定于请求的状态。如果您只有一个请求处理函数处理请求,那么没有理由将状态放在req
对象上,因为您可以在该请求处理函数中使用局部变量。但是,如果您正在使用中间件,其工作是在最终到达请求处理程序之前进行设置,那么req
对象就是通常放置设置状态的位置。你会注意到req.session
也用在这段代码中。 .session
属性是由请求处理中的一些中间件放在那里的。
因此,在使用中间件时将状态添加到req
对象是很常见的。但是,在您显示的代码中的.msg
属性示例中,没有特别的理由将它放在req
对象上,因为它的值仅在本地函数中需要,所以它可以很容易(我会更清楚地说)在局部变量中。
在api服务器中更改req对象?
我最近选择了一个拥有开发团队的客户。我正在开发一个已经开发的网站,并且遇到了一些对我来说有点奇怪的事情。
我总是认为在路由处理中混淆请求对象本质上是不好的(我在这里可能完全错误)。
下面的代码让我感到困惑,因为我不确定为什么他们将req.query.msg分配给某个东西而不是仅仅创建一个变量并在ejs页面渲染上传递它。
/********************************************************
* *
* CHANGE PASSWORD ROUTE THAT POSTS THE NEW PASSWORD TO *
* DATABASE. *
* *
********************************************************/
app.post('/client/password', function (req, res) {
var url = URLS.ClientChangePW;
if(req.session.securityquestions[0].SSN !== "null" || req.session.securityquestions[0].SSN !== "undefined"){
if(req.body.pwd !== req.body.pwdconf){
res.redirect('/client/changePassword' + config.PWD_MISMATCH);
} else {
var ssn = req.session.securityquestions[0].SSN;
while(ssn.length < 9){
ssn = "0" + ssn;
}
url = url.replace("@ssn", ssn);
url = url.replace("@newpw", req.body.pwd);
}
request.put(url, function (err, xres, body) {
var data = JSON.parse(body);
if(data.status === 200){
email(req.session.securityquestions[0].EMAIL, "none", "forgotpw", function(result){
if(result){
req.query.msg = "Your password has been reset.";
} else {
req.query.msg = "Request unsuccessful. Please call number here for assistance.";
}
res.render('pages/login', {
session: req.session,
msg: req.query.msg
});
});
} else {
req.query.msg = "Request unsuccessful. Please call number here for assistance.";
res.render('pages/login', {
session: req.session,
msg: req.query.msg
});
}
});
}
});
再一次,我从未真正搞过req对象,所以我可能错了。我一直认为客户端设置了请求,我们使用它来发送响应。
回答如下:我不确定为什么他们将req.query.msg分配给某个东西而不是仅仅创建一个变量并在ejs页面渲染上传递它。
似乎没有任何理由在这里分配req.query.msg
财产。如果这是我的代码,我将使用一个单独的局部变量。
再一次,我从未真正搞过req对象,所以我可能错了。我一直认为客户端设置了请求,我们使用它来发送响应。
虽然这不是这里发生的事情,但在Express开发中常常使用中间件在req
对象上为请求处理程序设置状态,以便在路由堆栈中使用。 req
对象是规范对象,您在处理请求时保持特定于请求的状态。如果您只有一个请求处理函数处理请求,那么没有理由将状态放在req
对象上,因为您可以在该请求处理函数中使用局部变量。但是,如果您正在使用中间件,其工作是在最终到达请求处理程序之前进行设置,那么req
对象就是通常放置设置状态的位置。你会注意到req.session
也用在这段代码中。 .session
属性是由请求处理中的一些中间件放在那里的。
因此,在使用中间件时将状态添加到req
对象是很常见的。但是,在您显示的代码中的.msg
属性示例中,没有特别的理由将它放在req
对象上,因为它的值仅在本地函数中需要,所以它可以很容易(我会更清楚地说)在局部变量中。