entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

0voto

inserta multiples opciones en formulario nodejs

tengo un formulario que inserta multiples categorias con jquery clono el elemento <input type="text" name="catg[]">
para seguir agregando mas. a la hora del backend se me complica por que estoy usando body-parser y me toma todo como string y no un objecto que deberia ser un array. yo tengo pensado que si logro que fuera un objecto array [0,1] con un join seperar con hash propio cada categoria agregada para ser insertada en una sola consulta.

1 Respuesta

0voto

white Puntos75880

Hola @jsstoni, actualmente como recibes los datos? podrias colocar un console.log?

console.log(req.body);

el atributo extended en bodyParser.urlencoded esta en true?

app.use(bodyParser.urlencoded({ extended: true }));

deberias poder recibir un arreglo:

console.log(req.body.catg)

0voto

jsstoni comentado

es correcto amigo si esta.

app.use(bodyParser.urlencoded({
    extended: true
}));

y esto es lo que recibo
informatica,ingles una separacion por comas string mas no un arreglo que es lo que esperaba.

0voto

white comentado

podrias agregar el código donde defines tus middleware y el codigo del router donde recibes los datos? y si usas ajax podrias agregar el codigo javascript que envia los datos?

0voto

jsstoni comentado

var express = require('express'), app = module.exports = express(),
url = require('url'),
sanitizer = require("sanitizer"),
path = require('path');

var bodyParser = require('body-parser'),
cookieParser = require('cookie-parser'),
session = require('express-session');

app.use(bodyParser.urlencoded({
    extended: true
}));

app.use(cookieParser('hash_secret'));

app.use(session({
    secret: 'admin',
    proxy: true,
    resave: true,
    saveUninitialized: true
}));

var port = process.env.PORT || 80;

app.post('/new', function(req, res) {
    var catg = sanitizer.escape(req.body.catg);
    console.log("catg"); //return string :@
});

app.listen(port);

no uso ajax el envio del formulario es simple se clona el elemento input catg[]

var id = $("#categoria").clone();
$("#morecategoria").append(id);

0voto

white comentado

intenta usar .map para escapar el arreglo, asi usas sanitizer.escape() en todos los elementos:

app.post('/new', function(req, res) {
    var catg = req.body.catg.map(function(value, index){
        return sanitizer.escape(value);
    });

    console.log(catg); //return array ^^
});

PD: Si deseas algo recursivo te dejo una funcion para sanitizer que hize, esta trabaja recursivamente sobre objetos o arreglos.

sanitizer.recursive_escape = function(s)
{
    if(Array.isArray(s))
    {
        s.forEach(function(v, k){
            s[k] = sanitizer.recursive_escape(v);
        });
    }
    else if(typeof s == 'object')
    {
        Object.keys(s).forEach(function(k) {
            s[k] = sanitizer.recursive_escape(s[k]);
        });
    }
    else if(typeof s == 'string')
    {
        return sanitizer.escape(s);
    }

    return s;
};

var util = require('util');
var test = sanitizer.recursive_escape({
    a : '<',
    b : '>',
    c : ['<', '>', '"'],
    d : {e: '<', f: '>', g: {h: '"', i: '<script>'}}
});

console.log(util.inspect(test , {showHidden: false, depth: null}));

Por favor, accede o regístrate para responder a esta pregunta.

Otras Preguntas y Respuestas


...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta