В Node.js и Pug получите информацию из формы, где элементы создаются динамически - PullRequest
0 голосов
/ 30 сентября 2019

Я пытаюсь создать приложение, в котором пользователь будет создавать листинг для торговли, и сейчас я застреваю при удалении списков, когда они выбираются в таблице на главной странице. У меня есть форма, которая, как я полагаю, будет заполнена данными из массива, переданного на страницу из маршрутизатора. Однако всякий раз, когда я пытаюсь открыть console.log, чтобы увидеть, передаются ли элементы или данные могут быть получены, я получаю страницу с сообщением о том, что вход (выбранный), который передается, не определен. Я что-то упустил или это вообще возможно в node.js / express?

Вот код на странице мопса с формой, которая составляет форму и таблица для списков

mixin getLists(listings)
    each item in listings
        tr
            td.listcell
                   input(type="checkbox" name="selected" value=item.numID)
            td.listcell #{item.name}
            td.listcell #{item.data}

block.content
    .holder
        .listtable
            h4.title Current Listings:
            form(method="post" action="/deleteListings")
                table.listings
                    tr
                        td.listcell
                        td.listcell Name
                        td.listcell Status
                        td.listcell Data
                        +pullinglists(lists)
                input(type="submit" value="Delete Selected Listings")

Вот код моего роутера для сайта, который занимается продвижением списковк панели инструментов и пытаюсь удалить их

const express = require('express');
const User = require('../core/user');
const router = express.Router();
const nodemailer = require('nodemailer');
const user = new User();

var listings = [];

router.get('/dashboard', (req, res, next)=> {
    let user = req.session.user;

    if(user)
    {
        res.render('dashboard', {opp:req.session.opp, name:user.username, listings:listings});
        return;
    }
    res.redirect('/');
});

router.post('/generateListing', (req, res, next)=>{
    if(req.body.name == null)
    {
        res.redirect('/dashboard');
    }
    var temp={name : req.body.name,
        status: "Pending",
        otherData: req.body.data,
        numID: numberID
    };
    numberID++;
    listings.push(temp);
    res.redirect('/dashboard');
});

router.post('/deleteListing', (req, res, next)=>{
    var i;
    console.log(selected.value);
    if(req.body.selected != null)
    {
        for(i=0; i<req.body.selected; i++)
        {
            //remove selected items from the array
        }
    }
    res.render('/dashboard');
});

Я несколько новичок в узле и выражаю, поэтому я прошу прощения, если есть что-то действительно очевидное, что я здесь упускаю.

РЕДАКТИРОВАТЬ - Спасибо MikZuit за указание на нужное мне исправление.

Вместо

console.log(selected.value);

Это должно было быть

console.log(req.body.selected.value);

Что привело меня к следующему к удалению записи формы

if(req.body.selected != null)
{
    var i;
    for(i=0; i<req.body.selected.length; i++)
    {
        var elementToBeDeleted = listings.indexOf(req.body.selected[i]);
        listings.splice(elementToBeDeleted, 1);
    }
}
res.redirect('/dashboard');

1 Ответ

0 голосов
/ 30 сентября 2019

У вас есть это в шаблоне:

form(method="post" action="/deleteListings")

Так что я ожидаю увидеть некоторый код, начинающийся с этого на стороне сервера:

router.post('/deleteListings', (req, res, next) => {

В противном случае, где будет формаPOSTing to?

EDIT: Вы хотите добавить это до вызова app.listen:

app.use(express.json())

Таким образом, вы можете получить доступ к req.body и получить объект со всемиимена полей и значения, которые вы отправляете из формы.

Возможно, вам также потребуется установить application/x-www-form-urlencoded в качестве Content-Type в вашей форме, я не уверен, что по умолчанию, но это то, что яиспользовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...