Node.js 如何在express.js中在路由之间传递数据
希望有人能帮助我。找不到解决办法。也许我也走错了路? 这是一个简单的快速设置,我是个新手。 我从一个请求中得到一个响应,并希望将一个变量/响应中的数据传递到下一个路由的URL中。 因此,下一个URL中的一个参数应该是动态的,这取决于第一次调用的响应 这是我的全部代码: 我的问题是在哪里可以看到const sendoutIDNode.js 如何在express.js中在路由之间传递数据,node.js,express,Node.js,Express,希望有人能帮助我。找不到解决办法。也许我也走错了路? 这是一个简单的快速设置,我是个新手。 我从一个请求中得到一个响应,并希望将一个变量/响应中的数据传递到下一个路由的URL中。 因此,下一个URL中的一个参数应该是动态的,这取决于第一次调用的响应 这是我的全部代码: 我的问题是在哪里可以看到const sendoutID const express = require("express"); const app = express(); const request = re
const express = require("express");
const app = express();
const request = require("request");
const bodyParser = require("body-parser");
const port = 3001;
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
// Create Sendout
app.post("/createSendout", (req, res, next) => {
request.post(
{
url: "https://www.something.com/api/v1.2/surveys/904211/sendouts",
body: JSON.stringify(req.body),
headers: {
"Content-Type": "application/json",
"X-API-KEY": "xxxx-xxx-xxxx-xxx-xxxxxxx",
},
},
function (error, response, body) {
console.log(response.statusCode);
if (!error && response.statusCode == 200) {
// Successful call
var results = JSON.parse(body);
console.log(results.CreateSendoutResult.SendoutId); // View Results
// I want this data "results.CreateSendoutResult.SendoutId" passing to the next route
}
}
);
});
/* here the variable is just hard coded for now but
I want to pass it in the URL from my previous route
to the next route see below at + sendoutID +..*/
const sendoutId = 389125;
// Add Respondent
app.post("/addRespondent", (req, res, next) => {
request.post(
{
url:
"https://www.something.com/api/v1.2/surveys/904211/sendouts/" +
sendoutId +
"/respondents",
body: JSON.stringify(req.body),
headers: {
"Content-Type": "application/json",
"X-API-KEY": "xxxxxx-xxx-xxx-xxx-xxxxxxxx",
},
},
function (error, response, body) {
console.log(response);
//console.log(response.statusCode);
if (!error && response.statusCode == 200) {
// Successful call
var results = JSON.parse(body);
console.log(results); // View Results
}
}
);
});
app.listen(port, () => {
console.log(`app listening at http://localhost:${port}`);
});
results.CreateSendoutResult.SendoutId
分配给req.body
req.body.SendoutId=results.CreateSendoutResult.SendoutId代码>
next()中传递该变量
下一步(results.CreateSendoutResult.SendoutId)
function nextRoute(SenderId, req, res, next)
编辑:
const express = require("express");
const app = express();
const request = require("request");
const bodyParser = require("body-parser");
const port = 3001;
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
// Create Sendout
app.post("/createSendout", (req, res, next) => {
request.post(
{
url: "https://www.something.com/api/v1.2/surveys/904211/sendouts",
body: JSON.stringify(req.body),
headers: {
"Content-Type": "application/json",
"X-API-KEY": "xxxx-xxx-xxxx-xxx-xxxxxxx",
},
},
function (error, response, body) {
console.log(response.statusCode);
if (!error && response.statusCode == 200) {
// Successful call
var results = JSON.parse(body);
console.log(results.CreateSendoutResult.SendoutId); // View Results
// I want this data "results.CreateSendoutResult.SendoutId" passing to the next route
req.SendoutId = results.CreateSendoutResult.SendoutId;
}
}
);
}, addRespondent);
/* here the variable is just hard coded for now but
I want to pass it in the URL from my previous route
to the next route see below at + sendoutID +..*/
const sendoutId = 389125;
// Add Respondent
app.post("/addRespondent", addRespondent);
function addRespondent(req, res, next) => {
request.post(
{
url:
"https://www.something.com/api/v1.2/surveys/904211/sendouts/" +
req.sendoutId +
"/respondents",
body: JSON.stringify(req.body),
headers: {
"Content-Type": "application/json",
"X-API-KEY": "xxxxxx-xxx-xxx-xxx-xxxxxxxx",
},
},
function (error, response, body) {
console.log(response);
//console.log(response.statusCode);
if (!error && response.statusCode == 200) {
// Successful call
var results = JSON.parse(body);
console.log(results); // View Results
}
}
);
}
app.listen(port, () => {
console.log(`app listening at http://localhost:${port}`);
});
->这只是一个在中间运行的函数(在请求到达路由并在请求完成之前结束)。
中间件函数是可以访问请求对象(req)、响应对象(res)和下一个函数的函数。注意中间件函数不结束请求-响应周期,它必须调用next()将控制权传递给下一个中间件函数。否则,请求将挂起。 使用中间件功能的优点“您将来也可以将此功能用于任何其他请求”,在其他模块中使用它 (二) 谢谢你的帮助。 我现在发现了另一个解决方案,该解决方案与我发现的另一个问题一样有效。我不知道这是否也是导致该解决方案不起作用的原因,或者您的解决方案不起作用的原因。但我使用app.set()和app.get传递数据。 另一个问题是,现在使用app.set()和app.get()时,它有时有效,有时无效。因此,我在前端设置了一个超时,执行api请求。只是为了在两者之间留出一点时间。 这是我的新代码// Create Sendout
app.post("/createSendout", (req, res, next) => {
request.post(
{
url: "https://www.something.com/api/v1.2/surveys/904211/sendouts",
body: JSON.stringify(req.body),
headers: {
"Content-Type": "application/json",
"X-API-KEY": "xxxxxx-xxx-xx-xxxx-xxxxx",
},
},
function (error, response, body) {
console.log(response.statusCode);
if (!error && response.statusCode == 200) {
// Successful call
var results = JSON.parse(body);
console.log(results.CreateSendoutResult.SendoutId); // View Results
app.set("surveyId", results.CreateSendoutResult.SendoutId); // new added line
}
}
);
});
// Add Respondent
app.post("/addRespondent", (req, res, next) => {
const surveyId = app.get("surveyId"); // new added line
request.post(
{
url:
"https://www.something.com/api/v1.2/surveys/904211/sendouts/" +
surveyId +
"/respondents",
body: JSON.stringify(req.body),
headers: {
"Content-Type": "application/json",
"X-API-KEY": "xxxxxx-xxx-xxxx-xxxx-xxxxxxxx",
},
},
function (error, response, body) {
console.log(response);
//console.log(response.statusCode);
if (!error && response.statusCode == 200) {
// Successful call
var results = JSON.parse(body);
console.log(results); // View Results
}
}
);
});
谢谢你的快速回答!我尝试了你的建议,但似乎我仍然做错了什么。你可以将它添加到我的代码中,这样我就可以再次检查我是否在正确的位置添加了所有符号吗?你提到我需要此数据“results.CreateSendoutResult.SendoutId”“下一条路。你这是什么意思?要发送响应以创建发送路由吗?我从第一个路由器中的端点获得一个响应。在这个响应中是一个“sendoutId”。这个“sendoutId”需要是下一个路由器中端点的参数。url:
https://www.something.com/api/v1.2/surveys/904211/sendouts/${sendoutId}/受访者
已更新我的答案,希望这能回答您的问题。谢谢,不幸的是,它仍然不起作用。我已经尝试了很多,改变了很多。检查是否正确写入了每个变量。。但它仍然无法识别id。它显示在我的控制台中,而且它是正确的,我确信这一点,但它没有将id作为参数添加到URL中。谢谢,我尝试了您的解决方案,但到目前为止它没有工作。但是感谢中间件的提示。我需要对此进行更深入的研究。我在try语句中添加了一个更正(将const req更改为req=…)。为什么我删除了,因为const req将创建一个新变量,而我们希望使用相同的请求,因此req.SendoutID将只向以前存在的req对象添加一个属性。它现在应该可以工作了。谢谢!我已经试过了,但没用。但我在第一次测试中发现了另一个解决方案。也许你的解决方案现在也会起作用,因为我发现了另一个“问题”,这可能也是一个原因。我会把它作为新的评论发布。无论如何,感谢您的帮助:)它现在可以工作了,因为前面的“const req”语句错误地生成了一个新变量,但是当我们将其更改为仅为req.SendOutID=results.CreateSendoutResult.SendOutID时;它向现有的req对象添加一个新属性。
// Create Sendout
app.post("/createSendout", (req, res, next) => {
request.post(
{
url: "https://www.something.com/api/v1.2/surveys/904211/sendouts",
body: JSON.stringify(req.body),
headers: {
"Content-Type": "application/json",
"X-API-KEY": "xxxxxx-xxx-xx-xxxx-xxxxx",
},
},
function (error, response, body) {
console.log(response.statusCode);
if (!error && response.statusCode == 200) {
// Successful call
var results = JSON.parse(body);
console.log(results.CreateSendoutResult.SendoutId); // View Results
app.set("surveyId", results.CreateSendoutResult.SendoutId); // new added line
}
}
);
});
// Add Respondent
app.post("/addRespondent", (req, res, next) => {
const surveyId = app.get("surveyId"); // new added line
request.post(
{
url:
"https://www.something.com/api/v1.2/surveys/904211/sendouts/" +
surveyId +
"/respondents",
body: JSON.stringify(req.body),
headers: {
"Content-Type": "application/json",
"X-API-KEY": "xxxxxx-xxx-xxxx-xxxx-xxxxxxxx",
},
},
function (error, response, body) {
console.log(response);
//console.log(response.statusCode);
if (!error && response.statusCode == 200) {
// Successful call
var results = JSON.parse(body);
console.log(results); // View Results
}
}
);
});