尽管存在路线,但未捕获JADE表单提交

时间:2018-10-10 13:25:31

标签: javascript node.js express pug

我正在使用JADE,node.js,并表示要创建一个表以选择一些数据。 一切都在本地主机上运行。 当我尝试路由/ climateParamSelect时,它将起作用并显示我希望看到的内容,包括URL编码的元素。

此代码段位于app.js中,但我确认使用/ climateParamSelect?test = test可以正常工作。路线位于climateParamSelect.js

router.get('/', async function(req, res, next) {
    console.log('GET');
    console.log(req.query);
});

router.post('/', async function(req, res, next) {
    console.log('POST');
    console.log(req.params);
});
module.exports = router;

app.js中的代码毕竟可能很重要,因此以下是摘录:

const express = require('express');
var tableSelectRouter = require('./routes/tableSelect');
var cpSelectRouter = require('./routes/climateParamSelect');
var app = express();
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'jade');

app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
app.use('/climateParamSelect', cpSelectRouter);
app.use('/tableSel', tableSelectRouter);

当我使用下一页的“提交”按钮时,将调用它,但由于某种原因,从未采用以上路线。而是显示:等待本地主机。

html
  head
    title= title
    link(rel='stylesheet', href='/stylesheets/style.css')
    link(rel='stylesheet', href='https://cdn.datatables.net/1.10.19/css/jquery.dataTables.min.css')
    script(src='https://cdnjs.cloudflare.com/ajax/libs/jquery/1.12.1/jquery.min.js')  
    script(src='https://cdn.datatables.net/1.10.19/js/jquery.dataTables.min.js')  
    script.
        $(document).ready(function() {
            $('#selTable').DataTable();
        });
body
  form(name='productionSelect', method='post', action='/climateParamSelect')
    div#wrapper
      h1 Select production data for feature generation
      br
      table#selTable.display
        thead
          tr
            th headers
            //... 
        tbody
          tr
            td 
              input(type='checkbox',id='#{r}',name='#{r}')
            td 
            //...   
      br
      input(type='submit',value='Select Production',name='prodSubmit',data-transition='fade', data-theme='c')

我在这里想念什么?

谢谢

1 个答案:

答案 0 :(得分:0)

浏览器将坐在那里旋转,直到收到响应,并且您的路线中没有发送响应。我确定您要渲染一个视图,但是要快速测试它,只需使用res.send和一个字符串。

第二个问题是如何读取客户端发送的数据。 req.params用于对路由中的变量进行动态URL解析。要处理表单数据(您要在此处发送的数据),可以使用req.body

更改路线可解决您的问题:

router.post('/climateParamSelect', async function(req, res, next) {
    console.log('POST');
    console.log(req.body);
    res.send("hello");
});