Bonjour,
J'essaie actuellement de développer un site simple où je peux ajouter des utilisateurs (avec id, nom, prénom) avec un form à une base de données. Mon template ressemble à ça :
Code jsp : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31 <!DOCTYPE html> <html lang="en"> <%- include('inc/head') -%> <body> <%- include('inc/header') -%> <main> <h2>Users</h2> <ul> <% for (const user of users) { %> <li> <a href="/users/<%= user.user_id %>"><%= user.firstname %> <%= user.lastname.toUpperCase() %></a> (<code ><%= user.user_id.toLowerCase() %></code >) </li> <% }; %> </ul> <h2>Add a new user</h2> <form method="post" enctype="application/x-www-form-urlencoded"> <label for="user-id">User's ID</label> <input name="$user_id" id="user-id" type="text" /> <label for="user-firstname">First name</label> <input name="$firstname" id="user-firstname" type="text" /> <label for="user-lastname">Last name</label> <input name="$lastname" id="user-lastname" type="text" /> <button type="submit" id="submit">Submit</button> <button type="reset">Reset</button> </form> </main> <%- include('inc/footer') -%> </body> </html>
Lorsque je submit un utilisateur, la page se met à jour pour l'ajouter à une liste ul des utilisateurs, qui sont aussi des liens qui permettent d'accéder à leur propre page /users/:user où leur id, nom, prénom seront affichés. Les utilisateurs sont obtenus en faisant une requête à la BDD :
Mes routes sont situées dans le fichier users.js :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 function getUsers(callback) { const query = `SELECT user.rowid, user.* FROM user;`; connection.all(query, (error, rows) => { if (error) return callback(error); debug(`getUsers() completed`); return callback(undefined, rows); }); }
Mon but maintenant c'est que lorsque je clique sur un des liens, il m'emmène à la page /users/:user, dont le template (user.ejs) ressemble à ça :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31 const express = require("express"); const debug = require("debug")("cm5-demo:users"); const database = require("../db/database"); const router = express.Router(); router.get("/", (_request, response, next) => { database.getUsers((error, users) => { if (error) return next(error); return response.render("users", { page: "users", users }); }); }); router.get("/", (_request, response, next) => { debug(`getUser() start`, response) database.getUser((error, user) => { if (error) return next(error); return response.render("user", { page: "user", user }); }); }); router.post("/", (request, response, next) => { debug(`router.post:`, request.body); database.postUser(request.body, (error, id) => { if (error) return next(error); debug(`user added with id ${id}`); response.status(201); return response.redirect("/users"); }); }); module.exports = router;
Code jsp : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 <!DOCTYPE html> <html lang="en"> <%- include('inc/head') -%> <body> <%- include('inc/header') -%> <main> <h2>User</h2> <p> <%= user.firstname %> <%= user.lastname.toUpperCase() %> (<code><%= user.user_id.toLowerCase() %></code>) </p> </main> <%- include('inc/footer') -%> </body> </html>
Ma fonction getUsers() qui consiste à obtenir tous les utilisateurs marche très bien, mais c'est getUser() qui sert à obtenir spécifiquement un utilisateur qui me bloque :
Si quelqu'un saurait où je devrais faire des modifications pour y parvenir.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 function getUser(user, callback) { const query = `SELECT user.* FROM user;`; connection.run(query, user, (error, id) => { if (error) return callback(error); debug(`getUser() completed`, id); return callback(undefined, id); }); }
Merci d'avance
Partager