如何在Express之间传递数据

假设我有这个接收一些数据的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}); }); 

retrievedDatavariables从给定POST路由传递给GETpath的最佳方法是什么?

注意, res.render()方法似乎只适用于app.get()types的方法

您可以使用

 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')}); }); 

但是不能保证返回的数据是用户设置的数据,直到用户请求获取路由才会发送数据。 这也使得你的快递服务器有状态,这有很多可能的缺点。

你可以在这里读一下

如果你希望你的应用程序是无状态的,你可以把它传递给外部的某个地方,比如远程服务器,如独立于快速服务器的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”,则在提交表单后,会显示包含您发布的数据的呈现页面。

我发布这个假设你正在运行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 }); }); }); 

那么你的function应该是导出数据。 否则它不会这样。 getData.js可以像这样。

getModules / getData.js

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

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

代码说明

有了这个编码,你可以用req.body发送一些东西给你的函数。 但是返回值将与数据对象一起发送。 然后给你的下一个路线,这将是数据呈现为HTML。 你要显示的东西是在结果对象/数组中。 您可以访问<%= results._source.prop1%>等对象的属性。 但是你需要知道财产的标识符。