如何在Express中的路由之间传递数据

时间:2016-01-14 18:18:33

标签: node.js post express get routes

假设我有POST路由接收一些数据。



app.post('/getData', function(req, res){
  var retrievedData = req.body.exampleVariable;
   // Send data to GET method
});




我有这个GET方法呈现页面,但需要我在POST方法中检索到的数据



app.get('/displayData', function(req, res){
  // Retrieve data from POST method and display it.
  res.render('/examplePage.ejs', {retrievedData : req.retrievedData});
});




retrievedData变量从给定POST路线传递到GET路线的最佳方法是什么?

作为旁注,res.render()方法似乎只适用于app.get()类型方法

2 个答案:

答案 0 :(得分:1)

您可以使用

app.post('/getData', function(req, res){
  app.set('data', req.body.exampleVariable);
});
app.get('/displayData', function(req, res) {
  res.render('/examplePage.ejs', {retrievedData : app.get('data')});
});

但不保证返回的数据将是用户设置的数据,并且在用户请求获取路由之前不会发送数据。这也使你的快递服务器有状态,这带来了很多可能的缺点。

您可以阅读一下here

如果您希望您的应用程序是无状态的,您可以将您的内容传递到外部,例如像mysql这样独立于快速服务器的远程服务器。

如果您有任何用途,如果您愿意,也可以在同一个请求中发送和接收数据,如您的评论中所示,这似乎就是您要做的事情。 如果你有类似下面的东西,它应该工作正常,只要你肯定对“/ data”发出“POST”请求,考虑到它对“GET”请求工作正常。

app.post('/data', function(req, res){
  res.render('/examplePage.ejs', {
    retrievedData: req.body.exampleVariable
  });
});

下面是一个示例快递应用程序,以显示这可能如何工作

form.jade

form(method="post" action="data")
  input(type="text" name="data" value="some data")
  input(type="submit" value="submit")

data.jade

h1=data

server.js

require('express')()
  .use(require('body-parser').urlencoded({ extended: false }))
  .get('/form', (req, res) => res.render('form.jade'))
  .post('/data', (req, res) => res.render('data.jade', { data: req.body.data }))
  .listen(8083);

如果启动服务器并转到“localhost:8083 / form”, 提交表单后,您将看到一个包含您发布的数据的呈现页面。

答案 1 :(得分:0)

我发布这个假设您正在运行express.js / node.js。所有目录都在根目录中。

我认为您可以使用一条路线而不是两条路线。假设您有javascript函数/方法来获取根目录下的目录中的数据,请调用getModules,并将您的方法存储在文件调用getData.js中。

<强>路由/ index.js

var getDataModule = require('../getModules/getData.js');

router.post('/getData', function(req, res) {
  getDataModule.gatData(req.body, function(data) {
    res.render('/displayData', { title: 'Title', results: data });
  });
});

然后你的函数应该导出数据。否则就不会这样了。 getData.js可以是这样的。

<强> getModules / getData.js

module.exports.getData = function(data, callback){
  //body that work on data or what ever the logic including a callback
}

然后,您可以在displayData.ejs中呈现与普通HTML页面类似的结果。但是如果你打算使用这个diplayData.ejs作为模板,你可以在body中包含examplePage.ejs。

代码说明

使用此编码,您可以将req.body发送给您的函数。但返回值将与数据对象一起发送。然后,这将给您的下一个路线,该路线将数据呈现为HTML。您要显示的内容是结果对象/数组。您可以访问对象的属性&lt;%= results._source.prop1%&gt;等等。但是你需要知道属性的标识符。