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

Per*_*ive 6 post routes get node.js express

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

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

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

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

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

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

Rya*_*ite 3

您可以使用

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')});
});
Run Code Online (Sandbox Code Playgroud)

但不保证返回的数据就是用户设置的数据,并且直到用户发出获取路由的请求后才会发送数据。这也使您的 Express 服务器成为有状态的,这会带来很多可能的缺点。

你可以在这里阅读一些相关内容

如果您希望您的应用程序是无状态的,您可以将您的应用程序传递到外部某个地方,例如独立于 Express 服务器的远程服务器(例如 mysql)。

如果它有任何用处,如果您愿意,您还可以在同一请求中发送和接收数据,正如在您的评论中这似乎是您想要做的。如果您有类似下面的内容,只要您确实向“/data”发出“POST”请求,它应该工作正常,考虑到它对于“GET”请求工作正常。

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

下面是一个示例 Express 应用程序,展示了它是如何工作的

形玉

form(method="post" action="data")
  input(type="text" name="data" value="some data")
  input(type="submit" value="submit")
Run Code Online (Sandbox Code Playgroud)

数据玉石

h1=data
Run Code Online (Sandbox Code Playgroud)

服务器.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);
Run Code Online (Sandbox Code Playgroud)

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