Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js Express-如何将参数值从app.post方法重定向到app.get方法_Node.js_Express_Neo4j_Ejs - Fatal编程技术网

Node.js Express-如何将参数值从app.post方法重定向到app.get方法

Node.js Express-如何将参数值从app.post方法重定向到app.get方法,node.js,express,neo4j,ejs,Node.js,Express,Neo4j,Ejs,我对nodejs和expressjs非常陌生 我正在创建一个非常简单的单页nodejs应用程序,它将从用户那里获取一个数字,并根据该值从Neo4j数据库返回行数 为此,我使用了一个app.js文件,其中app.post和app.get方法都存在。我正在尝试使用app.post方法的值,该值是app.get'/post/output/'方法中的行,但我无法这样做 下面是我能够编写的代码: app.get('/', function(req,res,next){ res.render('index1

我对nodejs和expressjs非常陌生

我正在创建一个非常简单的单页nodejs应用程序,它将从用户那里获取一个数字,并根据该值从Neo4j数据库返回行数

为此,我使用了一个app.js文件,其中app.post和app.get方法都存在。我正在尝试使用app.post方法的值,该值是app.get'/post/output/'方法中的行,但我无法这样做

下面是我能够编写的代码:

app.get('/', function(req,res,next){
res.render('index1');
});

app.post('/post', function(req,res,next){
var Rows = req.body.Rows;
res.redirect('/post/output/');
});

app.get('/post/output/',function(req,res,next){
console.log(Rows);
session
.run('MATCH (N:NewsMedia) RETURN N ORDER BY N.Audience DESC LIMIT 
{nameparam}',{nameparam:Rows})
.then(function(result){
    var newsmedia = []; 
    result.records.forEach(function(record){
        newsmedia.push({
            name: record._fields[0].properties.name,
            size: record._fields[0].properties.Audience
        });
    });
    res.render('index',{
        NewsMedia: newsmedia
    }); 
})
.catch(function(err){
    console.log(err);
});
})

如果不是从客户端调用GET,则必须从post重定向到GET。此外,还不需要全局变量名

app.post('/', function(req,res,next){
Name = req.body.fName;
   console.log(Name);
  res.redirect('/register')
})
app.get('/',function(req,res,next){
 console.log(Name);
   next();
});
app.get('/',function(req,res){
 console.log(Name);
session
    .run('MATCH (N:NewsMedia) RETURN N ORDER BY N.Audience DESC LIMIT {nameparam}',{nameparam:Name})
    .then(function(result){
        var newsmedia = []; 
        result.records.forEach(function(record){
            newsmedia.push({
                name: record._fields[0].properties.name,
                size: record._fields[0].properties.Audience
            });
        });
        res.render('index',{
            NewsMedia: newsmedia
        }); 
    })
    .catch(function(err){
        console.log(err);
    });
})

似乎没有理由在这里进行重定向。如果要执行重定向,有三种方法可以将数据传递到特定重定向:

在重定向到的URL中使用查询参数。 通过在cookie中设置数据 通过将数据存储在绑定到会话cookie的服务器端会话中 也就是说,在我看来,您可以跳过重定向,将呈现代码放在POST操作中。浏览器将呈现从表单帖子发回的任何数据,并在浏览器中显示:

app.get('/', function(req,res,next){
    res.render('index1');
});

app.post('/post', function(req,res,next){
    var Rows = req.body.Rows;
    console.log(Rows);
    session.run('MATCH (N:NewsMedia) RETURN N ORDER BY N.Audience DESC LIMIT {nameparam}',{nameparam:Rows})
      .then(function(result){
        var newsmedia = []; 
        result.records.forEach(function(record){
            newsmedia.push({
                name: record._fields[0].properties.name,
                size: record._fields[0].properties.Audience
            });
        });
        res.render('index',{
            NewsMedia: newsmedia
        }); 
    }).catch(function(err){
        console.log(err);
        res.sendStatus(500);
    });
});

您不希望在模块级变量或全局变量中保存请求之间的状态,因为所有用户的所有请求都将访问这些状态,这意味着如果两个用户处于相同的重定向过程中,他们的数据将相互碰撞,一个用户的数据将显示在另一个用户的浏览器中。这是灾难的秘诀。用户特定的状态必须通过上面列出的一种方式从一个请求共享到另一个请求。

客户的工作通常是从一个帖子中获取信息,并在后续的GET请求中使用。由于可能存在许多不同的客户端,服务器无法像您尝试的那样将这种类型的状态存储在普通变量中。它可以将其存储在特定于该客户机的会话或cookie中,但如果客户机完全管理它会更好,因为真正的客户机知道它下一步将做什么以及使用什么数据。我想我明白你的观点@jfriend00,但是我不知道如何实现它。您必须向我们展示客户端代码,以便我们提供帮助。@jfriend00我已经添加了index.ejs文件以及主页的外观。为什么不从.post中执行res.sendsomeContentHere呢?我不知道你的客户端代码从哪里得到了你想要了解的真正问题是什么。嗨@dev9我已经编辑了我到目前为止所做的,但我仍然无法实现我想要的,它将Rows参数从POST方法发送到app.get'/POST/output/'方法。使用范围更大的变量来跟踪从一个请求到另一个请求的状态是完全错误的。这假设一次只有一个用户使用此服务器。一旦你有两个用户同时这么做,这绝对不会正常工作。这是完全错误的。@Sankar-请参阅我之前对这个答案的评论,也请参阅我的答案。这个答案中的技术完全是错误的服务器设计,将导致一个用户的数据与其他用户的数据混淆。你不能这样写服务器。是的@jfriend00我按照你的回答得到了结果,谢谢你给我解释。