Estou trabalhando na configuração de um servidor http usando node.js e engine. No entanto, continuo enfrentando problemas que tenho poucas informações sobre como resolver. Gostaria de receber ajuda para resolver isso, por favor.
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)
Abaixo está o que eu configurei para iniciar este mecanismo.
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');
};
Comente as
res.render
linhas do seu código e adicione-asnext(err);
. Se você não estiver usando um mecanismo de exibição, ores.render
material gerará um erro.Desculpe, você também precisará comentar esta linha:
Minha solução resultaria em não usar um mecanismo de exibição. Você não precisa de um mecanismo de visualização, mas se esse for o objetivo, tente o seguinte:
Você precisará das
res.render
linhas ao usar um mecanismo de exibição também. Algo assim:fonte
Se você deseja renderizar um arquivo html, use:
Então você remove:
Coloque seu
*.html
noviews
diretório ou ative umpublic
diretório como dir estático e coloque-oindex.html
nopublic
dir.fonte
response.sendfile()
está obsoleto, use emresponse.sendFile()
vez disso. Observe que o capital "F".definir o mecanismo de visualização da seguinte maneira
fonte
Se tudo o que for necessário é enviar o código html embutido no código, podemos usar abaixo
fonte
Acabei de receber esta mensagem de erro e o problema era que eu não estava configurando meu middleware corretamente.
Estou criando um blog na pilha MEAN e precisava de análise corporal para os arquivos .jade que eu estava usando no front end. Aqui está o trecho de código do meu arquivo " /middleware/index.js ", do meu projeto.
Além disso, aqui está o meu arquivo " package.json ", você pode estar usando versões diferentes de tecnologias. Nota: como não tenho certeza das dependências entre eles, estou incluindo o arquivo inteiro aqui:
Espero que isso ajude alguém! Muito bem sucedida!
fonte
As respostas acima estão corretas, mas descobri que um simples erro de digitação também pode gerar esse erro. Por exemplo, eu tive var router = express () em vez de var router = express.Router () e obtive esse erro. Portanto, deve ser o seguinte:
fonte
Você pode usar express-error-handler para usar páginas html estáticas para manipulação de erros e evitar definir um manipulador de exibição.
O erro provavelmente foi causado por um 404, talvez um favicon ausente (aparente se você tivesse incluído a mensagem anterior do console). O 'view manipulador' de 'html' não parece ser válido no 4.x express.
Independentemente da causa, você pode evitar a definição de um manipulador de exibição (válido), desde que modifique elementos adicionais da sua configuração.
Suas opções para corrigir esse problema são:
http://expressjs.com/en/api.html#res.render
O uso da renderização sem um caminho de arquivo chama automaticamente um manipulador de exibição, como nas duas linhas a seguir da sua configuração:
e:
Certifique-se de instalar o express-error-handler com:
Em seguida, importe-o no seu app.js
Altere o tratamento de erros para usar:
fonte
Basta definir o mecanismo de exibição no seu código.
fonte
Eu tenho o mesmo problema (para fazer um projeto de pilha médio) .. o problema é que eu não mencionei o formato para instalar o npm, ou seja; pug ou jade, ejs etc. para resolver esse goto npm e digite express --view = pug foldername. Isso carregará os arquivos pug necessários (index.pug, layout.pug etc.) na sua pasta.
fonte
se você tiver esse erro usando o gerador expresso, eu o resolvi usando
ao invés de
fonte