Je travaille sur la mise en place d'un serveur http à l'aide de node.js et du moteur. Cependant, je continue de rencontrer des problèmes que j'ai peu d'informations sur la façon de résoudre. J'apprécierais de l'aide pour résoudre ce problème.
Error: No default engine was specified and no extension was provided.
at new View (...\node_modules\express\lib\view.js:41:42)
at Function.app.render (...\node_modules\express\lib\application.js:484:12)
at ServerResponse.res.render (...\node_modules\express\lib\response.js:783:7)
at Layer.handle (...\app.js:123:7)
at trim_prefix (...\node_modules\express\lib\router\index.js:225:17)
at c (...\node_modules\express\lib\router\index.js:198:9)
at Function.proto.process_params (...\node_modules\express\lib\router\index.js:253:12)
at next (...\node_modules\express\lib\router\index.js:189:19)
at next (...\node_modules\express\lib\router\index.js:202:7)
at next (...\node_modules\express\lib\router\index.js:166:38)
Voici ce que j'ai configuré pour démarrer ce moteur.
var http = require('http');
var module = require("module")
var logger = require('morgan');
var express = require('express');
var app = module.exports = express();
var silent = 'test' == process.env.NODE_ENV;
var httpServer = http.createServer(app); // app middleware
app.enable('strict routing');
// app.all('*', function(req, res, next)/*** CORS support.*/
// {
// if (!req.get('Origin')) return next();// use "*" here to accept any origin
// res.set('Access-Control-Allow-Origin', 'http://localhost:3000');
// res.set('Access-Control-Allow-Methods', 'GET, POST');
// res.set('Access-Control-Allow-Headers', 'X-Requested-With, Content-Type');
// res.set('Access-Control-Allow-Max-Age', 3600);
// if ('OPTIONS' == req.method) return res.send(200);
// next();
// });
app.set('views', __dirname + '/views'); // general config
app.set('view engine', 'html');
app.get('/404', function(req, res, next){
next();// trigger a 404 since no other middleware will match /404 after this one, and we're not responding here
});
app.get('/403', function(req, res, next){// trigger a 403 error
var err = new Error('not allowed!');
err.status = 403;
next(err);
});
app.get('/500', function(req, res, next){// trigger a generic (500) error
next(new Error('keyboard cat!'));
});
app.use(express.static(__dirname + '/public'));
//error handlers
app.use(logErrors);
app.use(clientErrorHandler);
app.use(errorHandler);
// middleware with an arity of 4 are considered error handling middleware. When you next(err)
// it will be passed through the defined middleware in order, but ONLY those with an arity of 4, ignoring regular middleware.
function clientErrorHandler(err, req, res, next) {
if (req.xhr) {// whatever you want here, feel free to populate properties on `err` to treat it differently in here.
res.send(err.status || 500, { error: err.message });
}
else
{ next(err);}
};
// create an error with .status. we can then use the property in our custom error handler (Connect repects this prop as well)
function error (status, msg) {
var err = new Error(msg);
err.status = status;
return err;
};
function logErrors (err, req, res, next) {
console.error(err.stack);
next(err);
};
function errorHandler (err, req, res, next) {
res.status(500);
res.render('error', { error: err });
};
// Error handlers
// Since this is the last non-error-handling middleware use()d, we assume 404, as nothing else responded.
// $ curl http://localhost:3000/notfound
// $ curl http://localhost:3000/notfound -H "Accept: application/json"
// $ curl http://localhost:3000/notfound -H "Accept: text/plain"
app.use(function(req, res, next){
res.status(404);
if (req.accepts('html')) {// respond with html page
res.render('404', { url: req.url });
return;
}
if (req.accepts('json')) {// respond with json
res.send({ error: 'Not found' });
return;
}
res.type('txt').send('Not found');// default to plain-text. send()
});
// error-handling middleware, take the same form as regular middleware, however they require an
// arity of 4, aka the signature (err, req, res, next).when connect has an error, it will invoke ONLY error-handling middleware.
// If we were to next() here any remaining non-error-handling middleware would then be executed, or if we next(err) to
// continue passing the error, only error-handling middleware would remain being executed, however here
// we simply respond with an error page.
app.use(function(err, req, res, next){
// we may use properties of the error object here and next(err) appropriately, or if we possibly recovered from the error, simply next().
res.status(err.status || 500);
res.render('500', { error: err });
});
if (!module.parent) {// assigning to exports will not modify module, must use module.exports
app.listen(3000);
silent || console.log('Express started on port 3000');
};
Commentez les
res.render
lignes de votre code et ajoutez-les à lanext(err);
place. Si vous n'utilisez pas de moteur de visualisation, leres.render
contenu générera une erreur.Désolé, vous devrez également commenter cette ligne:
Ma solution aurait pour conséquence de ne pas utiliser de moteur de visualisation. Vous n'avez pas besoin d'un moteur de visualisation, mais si tel est l'objectif, essayez ceci:
Vous aurez également besoin des
res.render
lignes lors de l'utilisation d'un moteur de visualisation. Quelque chose comme ça:la source
Si vous souhaitez rendre un fichier html, utilisez:
Ensuite, vous supprimez:
Mettez votre
*.html
dans leviews
répertoire, ou servez unpublic
répertoire en tant que répertoire statique et mettez leindex.html
dans le répertoirepublic
.la source
response.sendfile()
est obsolète, utilisez à laresponse.sendFile()
place. Notez que la majuscule "F".définir le moteur de vue de la manière suivante
la source
Si tout ce dont vous avez besoin est d'envoyer du code html en ligne dans le code, nous pouvons utiliser ci-dessous
la source
Je viens de recevoir ce message d'erreur et le problème était que je ne configurais pas correctement mon middleware.
Je construis un blog dans la pile MEAN et j'avais besoin d'une analyse du corps pour les fichiers .jade que j'utilisais sur le côté frontal. Voici l'extrait de code de mon fichier " /middleware/index.js ", de mon projet.
Aussi, voici mon fichier " package.json ", vous utilisez peut-être différentes versions de technologies. Remarque: parce que je ne suis pas sûr des dépendances entre eux, j'inclus le fichier entier ici:
J'espère que cela aide quelqu'un! Bonne chance!
la source
Les réponses ci-dessus sont correctes, mais j'ai trouvé qu'une simple faute de frappe peut également générer cette erreur. Par exemple, j'avais var router = express () au lieu de var router = express.Router () et j'ai obtenu cette erreur. Cela devrait donc être le suivant:
la source
Vous pouvez utiliser express-error-handler pour utiliser des pages HTML statiques pour la gestion des erreurs et pour éviter de définir un gestionnaire de vue.
L'erreur a probablement été causée par un 404, peut-être un favicon manquant (apparent si vous aviez inclus le message de console précédent). Le «gestionnaire de vue» de «html» ne semble pas être valide dans 4.x express.
Quelle que soit la cause, vous pouvez éviter de définir un gestionnaire de vue (valide) tant que vous modifiez des éléments supplémentaires de votre configuration.
Vos options pour résoudre ce problème sont:
http://expressjs.com/en/api.html#res.render
L'utilisation de render sans chemin de fichier appelle automatiquement un gestionnaire de vue comme avec les deux lignes suivantes de votre configuration:
et:
Assurez-vous d'installer express-error-handler avec:
Puis importez-le dans votre app.js
Modifiez ensuite votre gestion des erreurs pour utiliser:
la source
Définissez simplement le moteur de vue dans votre code.
la source
J'ai eu le même problème (pour faire un projet de pile moyenne) .. le problème est que je n'ai pas mentionné le formate pour installer npm ie; pug ou jade, ejs etc. donc pour résoudre ce goto npm et entrez express --view = pug nomdossier. Cela chargera les fichiers pug nécessaires (index.pug, layout.pug etc.) dans votre dossier donné.
la source
si vous avez cette erreur en utilisant le générateur express, je l'ai résolue en utilisant
au lieu de
la source