J'apprends à faire Todo app. Sur le site Web, j'étudie est https://coderwall.com/p/4gzjqw/build-a-javascript-todo-app-with-express-jade-and-mongodb
J'ai tapé comme décrit l'instruction,
[app.js]
var main = require('./routes/main');
var todo = require('./routes/todo');
var todoRouter = express.Router();
app.use('/todos', todoRouter);
app.get('/', main.index);
todoRouter.get('/',todo.all);
todoRouter.post('/create', todo.create);
todoRouter.post('/destroy/:id', todo.destroy);
todoRouter.post('/edit/:id', todo.edit);
[/routes/todo.js]
module.exports ={
all: function(req, res){
res.send('All todos');
},
viewOne: function(req, res){
console.log('Viewing '+req.params.id);
},
create: function(req, res){
console.log('Todo created');
},
destroy: function(req, res){
console.log('Todo deleted');
},
edit: function(req, res){
console.log('Todo '+req.params.id+' updated');
}
};
et j'ai eu ce message d'erreur
Erreur: Route.get () nécessite des fonctions de rappel mais a un [objet indéfini]
Ai-je raté quelque chose ici?
Dans le tutoriel, le todo.all
renvoie un objet callback
. Ceci est nécessaire pour le router.get
syntaxe.
De la documentation:
router.METHOD (chemin, [rappel, ...] rappel)
Les méthodes router.METHOD () fournissent la fonctionnalité de routage dans Express, où METHOD est l'une des méthodes HTTP, telles que GET, PUT, POST, etc., en minuscules. Ainsi, les méthodes actuelles sont router.get (), router.post (), router.put (), etc.
Vous devez toujours définir le tableau d'objets callback
dans vos fichiers todo
pour pouvoir accéder à l'objet callback
approprié pour votre objet router
.
Vous pouvez voir dans votre tutoriel que todo.js
contient le tableau de callback
objets (c’est ce à quoi vous accédez lorsque vous écrivez todo.all
):
module.exports = {
all: function(req, res){
res.send('All todos')
},
viewOne: function(req, res){
console.log('Viewing ' + req.params.id);
},
create: function(req, res){
console.log('Todo created')
},
destroy: function(req, res){
console.log('Todo deleted')
},
edit: function(req, res){
console.log('Todo ' + req.params.id + ' updated')
}
};
Il existe deux itinéraires pour obtenir:
app.get('/', main.index);
todoRouter.get('/',todo.all);
Erreur: Route.get () nécessite des fonctions de rappel mais a un [objet non défini] Cette exception est levée lorsque route.get
ne reçoit pas de fonction de rappel. Comme vous avez défini todo.all dans le fichier todo.js, il est impossible de trouver main.index. C'est pourquoi cela fonctionne une fois que vous définissez le fichier main.index plus tard dans le tutoriel.
Quelque temps vous manquez sous la ligne. ajouter ce routeur comprendra cela.
module.exports = router;
Sois sûr que
votreFichier.js:
exports.yourFunction = function(a,b){
//your code
}
allumettes
app.js
var express = require('express');
var app = express();
var yourModule = require('yourFile');
app.get('/your_path', yourModule.yourFunction);
Pour moi, je me suis heurté à ce problème lorsque copier/coller un module dans un autre module pour le tester a nécessité de modifier les exportations. xxxx en haut du fichier
noeud js et express 4 utilisent cette séquence
express = require('express');
var router = express.Router();
module.exports = router;
la dernière ligne renvoie ce type d'erreur
Cette chose s'est également produite avec mon code, mais j'ai quand même résolu mon problème. J'ai vérifié mon dossier d'itinéraires (où mes tous les noeuds finaux sont les leurs). Je vous recommande de vérifier le fichier de votre dossier de routes et de vérifier si vous avez oublié d’ajouter votre lien de routeur particulier.
Ce qui m'est arrivé, c’est que j’exportais une fonction comme celle-ci:
module.exports = () => {
const method = async (req, res) => {
}
return {
method
}
}
mais je l'appelais comme ça:
const main = require('./module');
au lieu
const main = require('./module')();
Dans mon cas, j'essayais d'obtenir de l'application express. Au lieu de cela, je devais faire SET.
app.set('view engine','pug');