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
Javascript 如何在express.js应用程序中获取流程发布的数据?_Javascript_Node.js - Fatal编程技术网

Javascript 如何在express.js应用程序中获取流程发布的数据?

Javascript 如何在express.js应用程序中获取流程发布的数据?,javascript,node.js,Javascript,Node.js,页面结构如下所示: index.js - start.js (input form customization) - start.ejs (input form) - page.js - page.ejs 我有一个简单的表单,并通过router.post将其内容呈现给呈现页面.ejs上的用户 start.js内容: router.post('/page', function(req,res)) { var somedata = req.body.inputForm; r

页面结构如下所示:

index.js
 - start.js (input form customization)
 - start.ejs (input form)
 - page.js
 - page.ejs
我有一个简单的表单,并通过router.post将其内容呈现给呈现页面.ejs上的用户

start.js内容:

router.post('/page', function(req,res))
{
    var somedata = req.body.inputForm;
    res.render('page', {somedata : somedata});
}
我想在page.js中访问此数据,以便处理它。怎么做呢?

在你的

page.ejs

文件,您可以使用include标记执行以下操作:

<script>    
  var data= <%= somedata  %> ;
  <% include page.js %>
</script>

var数据=;

然后,您可以访问page.js中定义的“data”变量。

尝试以下操作注意,在这种情况下,somedata是一个字符串,需要引用(在page.ejs中)

app.js

有一个视图文件夹,文件夹内有

page.ejs

要测试:

  • 在命令行中运行以下命令:
    
    npm安装快车
    npm安装ejs
    节点应用程序

  • 打开web浏览器并导航到

  • 打开开发工具并选择控制台以查看结果

  • 初始化
  • mkdir SO-40876646
  • npm安装-g express generator
  • express--view=ejs.
  • npm安装
  • npm启动
  • 导航到
    http://localhost:3000
    并验证网站是否加载(standard express网站有一个非常简单的标题,上面写着express)
  • 设置中间件 Express中的所有中间件都是通过一个函数调用构建的,该函数调用包含三个参数:请求、响应和下一个

    • Request是请求对象,包含来自用户的详细信息
    • Response是响应对象,可以将详细信息发送回用户
    • 下一步是一个回调,当您完成处理时将调用它-为您的中间件提供开箱即用的异步支持
    出于我们的目的,我们将展示路由器和中间件的服务器端配置,以演示其使用

    在我们的
    routes/index.js
    文件中,我们创建了一个pageProcessor函数;这被连接到我们的页面路由器中,如下所示:

    var express = require('express');
    var router = express.Router();
    
    /* GET home page. */
    router.get('/', function(req, res, next) {
      res.render('index', { title: 'Express' });
    });
    
    router.get('/page', function(req, res) {
        res.render("page", { title: 'Express', information: "undefined"})
    });
    
    router.post('/page', pageProcessor, function(req, res) {
        res.render("page", {title: 'Express', information: req.params.information})
    })
    
    function pageProcessor(req, res, next) {
        req.params.information = req.body.information.toUpperCase();
    
        next();
    }
    
    module.exports = router;
    
    我们的处理函数有机会在渲染回调之前运行,以处理我们的参数并将它们设置为我们期望的格式。在我们的示例中,我们将信息字段转换为大写并返回它,但您可以利用此机会将其转换为或。关键点是参数在req.body和上输入

    这个例子是初步的,应该只作为一个出发点。您应该研究突出的、类似的和的实施,以获得这方面的进一步指导

    如果你愿意,我有这个代码工作,可以把它粘贴到回购协议中,让你自己拉和玩


    您可以阅读更多信息。

    对数据的修改是应该在
    文章/页面之前还是之后进行的?
    ?这是在express还是其他框架的上下文中?@peteb after.@Bob\u Gneu right-express.有趣!我会尽快检查并让你知道结果。你确定要在客户端处理吗?这在任何地方都是不受欢迎的,并且会让你受到安全漏洞的攻击。实际上,在发布数据之后,您应该在服务器端处理输入的所有验证。Express有一个很好的中间件系统,可以实现您梦想中的一切。大多数express插件都使用它,效果非常好,包括输入验证@Bob我同意代码的编写方式(直接向客户端公开post数据可能会令人不快),但我的回答更一般。由于您可以访问(在渲染函数上)客户端提供的数据,因此您可以在其中的任何部分中访问它。出于许多原因(如代码清晰性和可重用性),您可能希望客户端脚本位于不同的js文件中,而不是ejs文件中的脚本标记中。@webmasternewbie,它对您有用吗?这不是一个好的解决方案。如果问题是客户端解析,那么应该在发布之前提前处理。即使使用多部分表单,数据也不会重新提交或通过POST提交,只在客户端进行处理。感谢您的输入!但正如我所说,它不起作用。在我的邮件中发送一些文字,我将向您发送带有文件的信息-您使用express router的代码是不可行的。经过讨论,我们同意这是实现这一点的可能性之一。所以这是公认的答案。很好的答案!我确实使用了中间产品,但你的解释让我现在用了一种更好、更恰当的方式。谢谢不客气。既然你是新来的,请别忘了把答案标为已接受。你可能还想在你的网站上读到好运,不要对其他问题感到害羞!
    <!DOCTYPE html>
    <html>
    
    <body>
    <h1>Check console to see data </h1>
    <script>
        console.log('somedata is: <%= somedata %>');
        var data= '<%= somedata  %>' ;
        <% include page.js %>
    </script>
    
    </body>
    </html>
    
    console.log('in page.js. data variable is: '+data);
    
    var express = require('express');
    var router = express.Router();
    
    /* GET home page. */
    router.get('/', function(req, res, next) {
      res.render('index', { title: 'Express' });
    });
    
    router.get('/page', function(req, res) {
        res.render("page", { title: 'Express', information: "undefined"})
    });
    
    router.post('/page', pageProcessor, function(req, res) {
        res.render("page", {title: 'Express', information: req.params.information})
    })
    
    function pageProcessor(req, res, next) {
        req.params.information = req.body.information.toUpperCase();
    
        next();
    }
    
    module.exports = router;