Le thème général de ce billet est middleware de nœud et les gestionnaires erreurgestionnaire d'erreur de noeud d'émission
Lorsqu'un utilisateur accède à un lien comme site.com/user/username
, je veux imprimer un message si un utilisateur avec le nom d'utilisateur spécifié existe.
J'ai écrit 2 fonctions middleware pour implémenter cela: la première est users
et la 2ème est errorHandler
.
Mais pour une raison quelconque, l'ensemble du programme ne fonctionne pas. S'il vous plaît dites-moi où je me suis trompé. Voici le code:
let connect = require('connect');
let port = 3000;
let api = connect()
\t .use(users)
\t .use(errorHandler)
\t .listen(port);
var db = {
\t users: [
\t \t { name: 'tobi' },
\t \t { name: 'loki' },
\t \t { name: 'jane' }
\t ]
};
function users(req, res, next) {
\t var match = req.url.match(/^\/user\/(.+)/)
\t if (match) {
\t \t var user = db.users[match[1]];
\t \t if (user) {
\t \t \t res.setHeader('Content-Type', 'application/json');
\t \t \t res.end(JSON.stringify(user));
\t \t } else {
\t \t \t var err = new Error('User not found');
\t \t \t err.notFound = true;
\t \t \t next(err);
\t \t }
\t } else {
\t \t next();
\t }
}
function errorHandler(err, req, res, next) {
\t console.error(err.stack);
\t res.setHeader('Content-Type', 'application/json');
\t if (err.notFound) {
\t \t res.statusCode = 404;
\t \t res.end(JSON.stringify({ error: err.message }));
\t } else {
\t \t res.statusCode = 500;
\t \t res.end(JSON.stringify({ error: 'Internal Server Error' }));
\t }
}
'db.users [correspondance [1]]' << - Vous ne peut pas indexer dans un tableau d'objets comme celui-ci. Vous devez boucler le tableau pour un utilisateur où 'user.name === match [1]' –
Pour être exact, il montre toujours 'User not found' – Nick
exactement, db.users [match [1]] va toujours revenir 'undefined'. Vous ne faites pas la recherche correctement. –