Форма отправки JADE не обнаружена, хотя маршрут существует

1

Я использую JADE, node.js и express для создания таблицы для выбора некоторых данных. Все работает на localhost. Когда я пытаюсь использовать маршрут /climateParamSelect, он работает и отображает то, что я хотел бы видеть, включая URL-кодированные элементы.

Маршрутизация этого фрагмента кода находится в app.js, но я подтвердил, что он работает с использованием /climateParamSelect? Test = test. Маршруты расположены в климатеParamSelect.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);

Когда я использую кнопку отправки на следующей странице, она вызывается, но по какой-либо причине маршрут выше никогда не берется. Вместо этого он отображает: ожидание localhost.

html
  head
    title= title
    link(rel='stylesheet', href='/style.css')
    link(rel='stylesheet', href='/jquery.dataTables.min.css')
    script(src='/jquery.min.js')  
    script(src='/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')

Что мне здесь не хватает?

Спасибо

  • 0
    Какой адрес отображается в браузере после публикации формы?
  • 0
    Адрес никогда не меняется. Просто висит в ожидании localhost.
Теги:
express
pug

1 ответ

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");
});
  • 0
    Спасибо, я приму это во внимание. Проблема, кажется, в другом месте, хотя. Для пояснения я добавил часть app.js, включая задействованные маршруты.
  • 0
    Я отредактировал ответ и нашел другую проблему.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню