Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

409
Views
Código Javascript / EJS que muestra el error: TypeError: no se pueden leer las propiedades de nulo (leyendo 'nombre')

El código se ejecuta al principio, pero en el momento en que envío mi primera solicitud de publicación, aparece el siguiente error:

nodo:eventos:504 lanzar er; // Evento 'error' no manejado ^

TypeError: no se pueden leer las propiedades de nulo (leyendo 'nombre')

Actualmente usando: Node.js, mangosta

Paquetes utilizados: express, bodyParser, ejs, Mongoose

Código de archivo JS:

 const express = require("express"); const app = express(); app.use(express.static("public")); const bodyParser = require("body-parser"); app.use(bodyParser.urlencoded({extended: true})); const ejs = require("ejs"); app.set("view engine", "ejs"); const mongoose = require('mongoose'); mongoose.connect("mongodb://localhost:27017/learndb"); const questionSchema = { question : String, answer : String }; const Question = mongoose.model("Question", questionSchema); const subjectSchema = { name : String, questions : [questionSchema] }; const Subject = mongoose.model("Subject", subjectSchema); app.post("/", function(req, res) { const subjectName= req.body.subjectName; const subject = new Subject({ name: subjectName}); subject.save(); res.redirect("/"); }); app.get("/", function(req, res) { Subject.find({}, function(err, foundSubjects) { res.render("home", {whichSubjects: foundSubjects}); }); });

Código de archivo HTML/EJS:

 <body> <h1>Choose a Subject</h1> <% whichSubjects.forEach(function(eachSubject) { %> <div class=""> <form class="" action="/<%=eachSubject.name%>" method="get"> <button type="submit" name="button"> <%=eachSubject.name%></button> </form> </div> <% }) %> <div class=""> <form class="" action="/" method="post"> <input type="text" name="subjectName" value=""> <button type="submit" name="button">Add A Subject</button> </form> </div> </body>
about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

La respuesta era tan simple pero nos la perdimos. Lo primero que está mal en tu código son las rutas. Tienes dos caminos llamados / . Desea hacer que su ruta de inicio sea el lugar donde visualiza todos los datos y luego crear un formulario que publique los datos en una ruta diferente y, en caso de éxito, debería redirigir a su ruta de inicio. En su caso, todo lo que tiene que hacer es cambiar la ruta de publicación en hmtl a /addsubject y en el archivo js a app.post('/addsubject' rest of code

 //Generate express app const express = require('express'); const app = express(); app.set('views', './views'); app.set('view engine', 'ejs'); //Generate body parser const bodyParser = require('body-parser'); app.use(bodyParser.json()); app.use(bodyParser.urlencoded({ extended: true })); //Connect to MongoDB const mongoose = require('mongoose'); mongoose.connect('mongodb://localhost:27017/learndb'); const subJectSchema = new mongoose.Schema({ name: String, questions: [{type: String}] }) const Subject = mongoose.model('Subject', subJectSchema); app.post('/addsubject', (req, res) => { const subjectName = req.body.subjectName; const subject = new Subject({ name: subjectName }); subject.save((err, subject) => { if (err) { console.log(err); } else { console.log("User Saved"); } }); res.redirect('/'); }); app.get('/', (req, res) => { Subject.find({}, (err, subjects) => { if (err) { console.log(err); } else { res.render('home', { subjectList: subjects }); } }); }); app.listen(4000, () => { console.log('Server started on port 3000'); });
 <body> <h1>Choose Subject</h1> <div> <form action="/addsubject" method="post"> <label for="name">Name</label> <input type="text" name="subjectName" id="name"> <input type="submit" value="Create Subject"> </form> </div> <% if(subjectList.length> 0){ %> <% subjectList.forEach(subject=>{ %> <p> <%= subject.name %> </p> <% }) %> <% } else { %> <p>No subjects found Add Some</p> <% } %> </body>

about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!