2017-12-22 7 views
0

せずに、私はこのエラーを受けた人々についてのStackOverflowによって解決の質問のすべてを見て試してみました:テンプレートエンジン

Error: No default engine was specified and no extension was provided.

私はSO上のすべてのポストを洗い上げてきたように私は感じ、答えのどれも私のコードを修正していません。何か他のことが起こっているに違いありません。

私の問題は、Node.js + Expressをバックエンドに使用することを決定する前に、すでに多数のhtmlファイルを作成していることです。そのようなすべてをテンプレートエンジンに変換することを心配するのではなくpugかEJSか、私はちょうど私のディレクトリの静的なパブリックフォルダからそれらを提供したいと思う。

私が調査したところから、はありません。には、Node.js + Expressを使用するためのテンプレートエンジンが必要です。しかし、あなたはを実行するは、あなたのファイルを提供するために静的なパブリックフォルダを設定する必要があります。

app.use(express.static(path.join(__dirname, 'public')));を私のapp.jsファイルに含めました。私は「パブリック」フォルダを追加し、その中に私の静的ファイルのすべてを入れて、私のroutesファイル(私のindex.jsファイル)で、私は次のルート書かれていています:

router.get('/', (req, res) => { res.sendFile('./public/index.html'); });

を私が試してみました以下にそれを変える:

  1. res.sendFile('index');
  2. res.sendFile(path.join(__dirname, 'index.html')
  3. res.sendFile('../public/index.html');

また、私は静的なミドルウェアの構文をちょうどapp.use(express.static('public'));に変更しようとしましたが、何も変更されていないようです。

これらはすべて上記のエラーNo default engine was specified and no extension was provided.を表示します。 StackOverflowで同じ質問がたくさんあるときにこの質問をする必要があることは嫌いですが、私は現在何をすべきかについて完全に困惑しています。私のコードはこれ以上ありません。

これは私のファイルディレクトリ構造です。ここで

すべての私のルートを扱う私のindex.jsファイルされる:

const express = require('express'); 
const router = express.Router(); 

router.get('/', (req, res) => { 
    res.sendFile(path.join(__dirname, 'index.html')); 
}); 

router.post('/', (req, res) => { 

}); 

module.exports = router; 

は、ここに私のapp.jsファイルの:

const express = require('express'); 
const path = require('path'); 
const cookieParser = require('cookie-parser'); 
const bodyParser = require('body-parser'); 
const routes = require('./routes/index'); 
const errorHandlers = require('./handlers/errorHandlers'); 


const app = express(); 

app.use('/', routes); 

app.use(express.static(path.join(__dirname, 'public'))); 

app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded({ extended: true })); 

// If that above routes didnt work, we 404 them and forward to error handler 
app.use(errorHandlers.notFound); 

// One of our error handlers will see if these errors are just validation errors 
app.use(errorHandlers.flashValidationErrors); 

// Otherwise this was a really bad error we didn't expect! Shoot eh 
if (app.get('env') === 'development') { 
    /* Development Error Handler - Prints stack trace */ 
    app.use(errorHandlers.developmentErrors); 
} 

// production error handler 
app.use(errorHandlers.productionErrors); 

module.exports = app; 

は、ここに私のpackage.jsonです:

{ 
    "name": "********", 
    "version": "1.0.0", 
    "devDependencies": { 
    "grunt": "~0.4.1", 
    "grunt-contrib-concat": "^1.0.1", 
    "grunt-contrib-imagemin": "^1.0.1", 
    "grunt-contrib-sass": "^1.0.0", 
    "grunt-contrib-uglify": "^2.3.0", 
    "grunt-contrib-watch": "^1.0.0", 
    "webpack-dev-server": "^2.9.7" 
    }, 
    "description": "", 
    "main": "app.js", 
    "scripts": { 
    "start": "nodemon ./start.js" 
    }, 
    "author": "****** ********", 
    "license": "ISC", 
    "dependencies": { 
    "cookie-parser": "^1.4.3", 
    "dotenv": "^4.0.0", 
    "express": "^4.16.2", 
    "mongod": "^2.0.0", 
    "mongoose": "^4.13.7", 
    "nodemon": "^1.14.1", 
    "normalize.css": "^6.0.0" 
    } 
} 

これは私のスタートです。私はnpm startを実行したときに実行されるJSファイル:

const mongoose = require('mongoose'); 

// import environmental variables from our variables.env file 
require('dotenv').config({ path: 'variables.env' }); 

mongoose.connect(process.env.DATABASE, { useMongoClient: true }); 
mongoose.Promise = global.Promise; 
mongoose.connection.on('error', (err) => { 
    console.error(`${err.message}`); 
}); 


const app = require('./app'); 
app.set('port', process.env.PORT || 7777); 
const server = app.listen(app.get('port'),() => { 
    console.log(`Express running → PORT ${server.address().port}`); 
}); 
+1

を試してみてください答え

としてこれを渡すと、それが可能あなたのエラーハンドラの1つですが、 'res.render'呼び出しますか? – Josh

+0

これは問題だとは思っていませんが、 'res.sendFile(path.join(__ dirname + '/../ public/index.html'))'を試してください。また、 'router.get( '/')'のコンソールログには、応答があったかどうかが表示されます。 @ReyHaynes。 – ReyHaynes

+0

。これはうまくいった! index.jsファイルのパスを 'require'する必要がありましたが、うまくいきました。私が持っていたものと、なぜその構文だけを受け入れるのかの違いは何ですか? – newman

答えて

2

res.sendFile(path.join(__dirname + '/../public/index.html'))

関連する問題