Saya bekerja melalui pengaturan server http menggunakan node.js dan engine. Namun, saya terus mengalami masalah yang saya punya sedikit informasi tentang bagaimana menyelesaikannya. Saya sangat menghargai bantuan untuk menyelesaikan masalah ini.
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)
Di bawah ini adalah apa yang saya siapkan untuk menghidupkan mesin ini.
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');
};
Komentari
res.render
baris dalam kode Anda dan tambahkannext(err);
saja. Jika Anda tidak menggunakan mesin tampilan,res.render
hal - hal itu akan menimbulkan kesalahan.Maaf, Anda harus mengomentari baris ini juga:
Solusi saya akan menghasilkan tidak menggunakan mesin tampilan sekalipun. Anda tidak memerlukan mesin tampilan, tetapi jika itu tujuannya, coba ini:
Anda akan membutuhkan
res.render
garis saat menggunakan mesin tampilan juga. Sesuatu seperti ini:sumber
Jika Anda ingin merender file html, gunakan:
Lalu Anda menghapus:
Masukan Anda
*.html
dalamviews
direktori, atau melayanipublic
direktori sebagai statis dir dan menempatkanindex.html
dipublic
dir.sumber
response.sendfile()
sudah usang, gunakanresponse.sendFile()
saja. Perhatikan modal itu "F".atur tampilan engine dengan cara berikut
sumber
Jika semua yang diperlukan adalah mengirim kode html sebaris dalam kode, kita dapat menggunakan di bawah ini
sumber
Saya baru saja menerima pesan kesalahan ini, dan masalahnya adalah saya tidak mengatur middleware saya dengan benar.
Saya sedang membangun sebuah blog di tumpukan MEAN dan perlu penguraian tubuh untuk file .jade yang saya gunakan di sisi depan. Ini adalah potongan kode dari file "/ middleware/index.js " saya, dari proyek saya.
Juga, inilah file " package.json " saya , Anda mungkin menggunakan berbagai versi teknologi. Catatan: karena saya tidak yakin dengan dependensi di antara mereka, saya menyertakan seluruh file di sini:
Semoga ini bisa membantu seseorang! Semua yang terbaik!
sumber
Jawaban di atas benar, tetapi saya menemukan bahwa kesalahan ketik yang sederhana juga dapat menghasilkan kesalahan ini. Sebagai contoh, saya punya var router = express () bukan var router = express.Router () dan mendapatkan kesalahan ini. Jadi harus sebagai berikut:
sumber
Anda dapat menggunakan express-error-handler untuk menggunakan halaman html statis untuk penanganan kesalahan dan untuk menghindari mendefinisikan view handler.
Kesalahan mungkin disebabkan oleh 404, mungkin favicon yang hilang (jelas jika Anda telah memasukkan pesan konsol sebelumnya). 'View handler' dari 'html' tampaknya tidak valid dalam 4.x express.
Apa pun penyebabnya, Anda dapat menghindari mendefinisikan penangan tampilan (valid) selama Anda memodifikasi elemen tambahan dari konfigurasi Anda.
Pilihan Anda untuk memperbaiki masalah ini adalah:
http://expressjs.com/en/api.html#res.render
Menggunakan render tanpa filepath secara otomatis memanggil view handler seperti dengan dua baris berikut dari konfigurasi Anda:
dan:
Pastikan Anda menginstal express-error-handler dengan:
Kemudian impor di app.js Anda
Kemudian ubah penanganan kesalahan Anda untuk menggunakan:
sumber
Cukup setel view engine dalam kode Anda.
sumber
Saya mendapat masalah yang sama (untuk melakukan proyek stack mean) .. masalahnya adalah saya tidak menyebutkan format untuk menginstal npm yaitu; pug atau jade, ejs dll. untuk mengatasi ini goto npm dan masukkan express --view = pug foldername. Ini akan memuat file pug yang diperlukan (index.pug, layout.pug dll.) Di folder yang Anda berikan.
sumber
jika Anda mendapatkan kesalahan ini dengan menggunakan generator express, saya telah menyelesaikannya dengan menggunakan
dari pada
sumber