Я работаю над настройкой http-сервера с использованием node.js и движка. Тем не менее, я продолжаю сталкиваться с проблемами, о которых у меня мало информации о том, как их решить. Я был бы признателен за помощь в решении этого вопроса.
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)
Ниже показано, что я установил для запуска этого двигателя.
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');
};
Закомментируйте
res.render
строки в своем коде и добавьтеnext(err);
вместо них. Если вы не используете движок просмотра,res.render
выдаст ошибку.Извините, вам также придется закомментировать эту строку:
Мое решение привело бы к тому, что не использовал движок просмотра. Вам не нужен движок просмотра, но если это цель, попробуйте следующее:
Вам также понадобятся
res.render
строки при использовании механизма просмотра. Что-то вроде этого:источник
Если вы хотите отобразить файл HTML, используйте:
Затем вы удаляете:
Поместите ваш
*.html
вviews
каталог или используйтеpublic
каталог как статический каталог и поместите егоindex.html
в каталогpublic
.источник
response.sendfile()
устарело, используйтеresponse.sendFile()
вместо него. Обратите внимание на заглавную букву «F».установить движок просмотра следующим образом
источник
Если все, что нужно, - это отправить html-код прямо в код, мы можем использовать ниже
источник
Я только что получил это сообщение об ошибке, и проблема заключалась в том, что я неправильно настраивал промежуточное ПО.
Я создаю блог в стеке MEAN и нуждаюсь в синтаксическом анализе тела файлов .jade, которые я использовал на стороне интерфейса. Вот фрагмент кода из моего файла " /middleware/index.js " из моего проекта.
Также вот мой файл " package.json ", вы можете использовать разные версии технологий. Примечание: поскольку я не уверен в зависимости между ними, я включаю сюда весь файл:
Надеюсь, это поможет кому-то! Всего наилучшего!
источник
Приведенные выше ответы верны, но я обнаружил, что простая опечатка также может вызвать эту ошибку. Например, я использовал var router = express () вместо var router = express.Router () и получил эту ошибку. Так должно получиться следующее:
источник
Вы можете использовать экспресс-обработчик ошибок, чтобы использовать статические html-страницы для обработки ошибок и избежать определения обработчика представления.
Вероятно, ошибка была вызвана ошибкой 404, возможно, отсутствующим значком (очевидно, если вы включили предыдущее сообщение консоли). «Обработчик представления» для «html» не работает в 4.x express.
Независимо от причины, вы можете избежать определения (действительного) обработчика представления, если вы изменяете дополнительные элементы вашей конфигурации.
Ваши варианты решения этой проблемы:
http://expressjs.com/en/api.html#res.render
Использование рендеринга без пути к файлу автоматически вызывает обработчик представления, как в следующих двух строках вашей конфигурации:
и:
Убедитесь, что вы установили экспресс-обработчик ошибок с помощью:
Затем импортируйте его в свой app.js
Затем измените обработку ошибок, чтобы использовать:
источник
Просто установите движок просмотра в свой код.
источник
У меня такая же проблема (для проекта со средним стеком). Проблема в том, что я не упомянул форматирование для установки npm, т.е. pug или jade, ejs и т. д., чтобы решить этот goto npm и введите express --view = pug foldername. Это загрузит необходимые файлы мопсов (index.pug, layout.pug и т. Д.) В указанную вами папку.
источник
если у вас есть эта ошибка с помощью экспресс-генератора, я решил ее с помощью
вместо того
источник