我正在网站页脚(在footer.pug
中)提交一个简单的联系表:
form(method="POST" action="contact_form")
input(type='email' name='ct_email' data-name='ct_email' required)
textarea(type='text' name='ct_message' data-name='ct_message' required)
button(type='submit') Send
由于表单位于模板中,并且整个网站都使用页脚模板,因此可以通过多种途径提交表单:
/contact_form
/route1/contact_form
/route1/de/contact_form
所以现在看来我必须为所有可能的路线创建一个处理程序:
router.post('/contact_form', function(req, res, next) {
// ...
}
router.post('/route1/contact_form', function(req, res, next) {
// ...
}
如何轻松处理来自的所有路由中的POST请求,而无需为每个路由编写处理程序?
答案 0 :(得分:1)
您可以在表单中使用绝对路径引用,即使表单位于不同的页面中,它也将始终提交到同一路径。
尝试一下
form(method="POST" action="/contact_form")
请注意,操作已从contact_form
更改为/contact_form
。添加/
时,您开始将路径引用为域的绝对路径。因此,现在,所有页面的表单都将提交到http://your-domain/contact-form
。
答案 1 :(得分:1)
不能完全确定这是否是您的意思,但ExpressJS路由器的第一个参数(我想这就是router
在这里所做的事情) 可以是数组。所以代替:
router.post('/contact_form', function(req, res, next) {
// ...
}
router.post('/route1/contact_form', function(req, res, next) {
// ...
}
您可以这样做:
router.post(['/contact_form','route1/contact_form'],function(req,res,next){
//some fancy logic to handle both routes.
})
当然,这要求您保留这些可能路线的列表。另一方面,您可以遵循Dinesh Pandiyan的建议,而只需使用绝对路径即可。因此,您实际上不是在说page1.html,page2.html,page3.html等都拥有自己的路由器(或您的路由器阵列中的条目),而是说“转到域路由,然后转到此地址”。
答案 2 :(得分:0)
每个请求应在单独的函数中处理,因为每个请求都有自己的逻辑。但是如果你想
<div id="border-animation"><div>
目前,我没有办法测试此代码,但我认为这将对您有所帮助。
答案 3 :(得分:0)
这是另一个潜在的解决方案-使用独立的函数作为路由处理程序。
router.post('/a', handlePost);
router.post('/b', handlePost);
router.post('/c', handlePost);
function handlePost(req, res, next){
// use req.path here to figure out what url was called
}