"Impossible de lire la propriété 'longueur' undefined' nodeJS
Je me suis prise en main en Node.js et je suis complètement confus quant à pourquoi je ne peux pas obtenir les résultats de ma requête SQL à rendre sur une page, je suis en utilisant sqlite3.
C'est une partie de mon index.js fichier
router.get('/students', function (req, res, module) {
var fs = require("fs");
var file = "./test.db";
var exists = fs.existsSync(file);
if (!exists) {
console.log("Creating DB file.");
fs.openSync(file, "w");
}
var sqlite3 = require("sqlite3").verbose();
var db = new sqlite3.Database(file);
db.serialize(function () {
if (!exists) {
db.run("Create table students ( ID INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL UNIQUE, Nom varchar (255), Prenom varchar (255) );");
}
});
db.all('SELECT * FROM students', function selectCb(err, rows, fields) {
if (err) {
throw err;
}
for (var i in rows) {
console.log(rows[i]);
}
res.render('showResults.jade', {
results: rows
});
});
db.close();
res.render('students', { title: 'list' });
});
C'est ma Jade (créer.jade) fichier;
block content
form(method='get', action='/students/create')
button(type='submit') Creer
ul
each item, i in results
li #{item.Nom} (#{item.Prenom})
li= JSON.stringify(item)
J'ai mis tout ça dans mon express app, je le lance avec ma coquille, je reçois toutes les données sql comme ceci:
{ ID: 1, Nom: 'zeze', Prenom: 'zeze' }
{ ID: 2, Nom: 'ertty', Prenom: 'uuuuuuuuuuu' }
Mais ma /étudiants page afficher un message
http://i.stack.imgur.com/ormUG.png
Pourriez-vous s'il vous plaît aidez-moi, je suis vraiment désespérée.
(Désolé pour mon mauvais anglais que je suis français) ^^
OriginalL'auteur Trigamma | 2014-07-03
Vous devez vous connecter pour publier un commentaire.
et cette ligne
Les noms de variables ne correspondent pas.
De l'image, je peux voir que vous êtes le rendu de la page appelée
students.jade
. Sur cette page, vous êtes d'envoi variabletitle
à Jade, mais, vous avez déclaré que la variable serait appeléresults
en Jade.OriginalL'auteur paradite
Avez-vous essayé de supprimer le deuxième
res.render
appel?Il est possible que c'est celui qui est appelé au lieu de la première depuis l'appel asynchrone de la DB n'est pas encore terminée au moment où l'exécution a atteint la deuxième
res.render
appel.OriginalL'auteur Emanuel Saringan
db.close() devrait être déplacé à l'intérieur de la requête de rappel parce qu'il ferme la connexion db avant que la requête a la chance de finir. Voici le code révisé:
OriginalL'auteur Ben