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
节点应用程序
mkdir SO-40876646
npm安装-g express generator
express--view=ejs.
npm安装
npm启动
http://localhost:3000
并验证网站是否加载(standard 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;