Erreur: Pas de défaut moteur a été spécifié et aucune extension n'est prévue
Je suis en train de travailler à travers la mise en place d'un serveur http à l'aide de node.js et le moteur. Cependant, je continue à courir dans les questions que j'ai peu d'informations sur la façon de résoudre j'apprécierais un peu d'aide à la résolution de cette s'il vous plaît.
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)
Ci-dessous est ce que j'ai mis en place pour le démarrage de 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');
};
Vous devez vous connecter pour publier un commentaire.
La res.rendre les choses se lever une erreur si vous n'êtes pas à l'aide d'un moteur d'affichage.
Si vous voulez juste pour servir json remplacer le
res.render('error', { error: err });
lignes dans votre code avec:PS: les Gens ont aussi habituellement message dans le retour de l'objet:
Il vous manque le point de vue moteur, par exemple, utiliser jade:
changer votre
avec
Si vous souhaitez utiliser un code html amical syntaxe à utiliser à la place ejs
MODIFIER
Comme vous pouvez le lire à partir de view.js Express View Module
Vous devez avoir installé un
default engine
Express
de recherche par défaut de la vue de mise en page parprogram.template
comme vous pouvez le lire ci-dessous:et comme vous pouvez le lire ci-dessous:
la vue par défaut du moteur est
jade
Commentaire la
res.render
lignes dans votre code et ajouter dansnext(err);
à la place. Si vous n'êtes pas à l'aide d'un moteur d'affichage, lares.render
trucs lèvera une erreur.Désolé, vous aurez à commenter cette ligne:
Ma solution entraînerait pas l'aide d'un moteur d'affichage si. Vous n'avez pas besoin d'un moteur d'affichage, mais si c'est le but, essayez ceci:
Vous aurez besoin de la
res.render
lignes lors de l'utilisation d'un moteur d'affichage ainsi. Quelque chose comme ceci:Si vous souhaitez rendre un fichier html utiliser
puis vous retirez de l'
seule chose, c'est de mettre votre index.html dans les vues. ou de rendre public le dossier de statique et de mettre le index.html en public
response.sendfile()
est obsolète , utilisezresponse.sendFile()
à la place. Notez que le capital "F".vue d'ensemble de moteur de la manière suivante
Si tout ce qui est nécessaire est d'envoyer du code html inline dans le code, on peut utiliser ci-dessous
Je viens de recevoir ce message d'erreur, et le problème était que je n'étais pas la configuration de mon middleware correctement.
Je suis la construction d'un blog dans le MOYENNE pile et le besoin du corps pour l'analyse de la .jade les fichiers que j'ai utilisé sur le front du côté de l'extrémité. Voici l'extrait de code de mon "/middleware/index.js" fichier de mon projet.
Aussi, voici mon "paquet.json" du fichier, vous pouvez être en utilisant différentes versions de technologies.
Remarque: parce que je ne suis pas sûr de les dépendances entre eux, je joins le fichier en entier ici:
Espère que cela aide quelqu'un! Tout le meilleur!
Les réponses ci-dessus sont corrects, mais j'ai trouvé qu'une simple faute de frappe peut également générer cette erreur. Par exemple, j'avais var routeur = express() au lieu de var routeur = express.Routeur() et a obtenu cette erreur. Il devrait donc être le suivant:
Vous pouvez utiliser express-gestionnaire d'erreurs pour utiliser des pages html statiques pour la gestion d'erreur et d'éviter de définir un point de vue gestionnaire.
L'erreur a probablement été causé par une erreur 404, peut-être un manque de favicon (apparent si vous avez inclus le précédent message de la console). La " vue de gestionnaire de 'html' ne semble pas être valide dans le 4.x express.
Quelle que soit la cause, vous pouvez éviter de définir un (valide) vue gestionnaire, aussi longtemps que vous le modifier d'autres éléments de votre configuration.
Sont vos options pour résoudre ce problème sont:
http://expressjs.com/en/api.html#res.render
À l'aide de rendu sans filepath appelle automatiquement un point de vue gestionnaire comme avec les deux lignes suivantes à partir de votre configuration:
et:
Assurez-vous d'installer express-gestionnaire d'erreurs avec:
Puis de l'importer dans votre app.js
Puis changez d'erreur de manipulation à l'usage:
Juste vue d'ensemble de moteur dans votre code.