Ошибка: не указан движок по умолчанию и расширение не предоставлено (развертывание приложения в Heroku) - PullRequest
0 голосов
/ 05 января 2020

Я пытаюсь развернуть простое приложение html / css / js в Heroku, и я настроил свой бэкэнд с Node.js следующим образом:

(сервер. js)

var express = require('express');
var app = express();

var port = process.env.PORT || 8080;

app.use(express.static('dice-game'));

//routes
app.get("/", function(req, res) {
    res.render("index");
})

app.listen(port, function() {
    console.log("app running");
})

(Procfile)

web: npm server.js

(пакет. json)

{
  "name": "dice-game",
  "version": "1.0.0",
  "description": "js application",
  "scripts": {
    "start": "node server.js",
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "engines": {
    "node": "9.8.0"
  },
  "repository": {
    "type": "git",
    "url": "git+https://github.com/zay-asad/dice-game.git"
  },
  "author": "zayan asad",
  "license": "ISC",
  "bugs": {
    "url": "https://github.com/zay-asad/dice-game/issues"
  },
  "homepage": "https://github.com/zay-asad/dice-game#readme",
  "dependencies": {
    "express": "^4.17.1"
  }
}

Всякий раз, когда я пытаюсь запустить узел локально с "сервером узла. js" , я получаю следующее сообщение об ошибке:

Ошибка:

No default engine was specified and no extension was provided.
    at new View (/Users/oas03/dice-game/node_modules/express/lib/view.js:61:11)
    at Function.render (/Users/oas03/dice-game/node_modules/express/lib/application.js:570:12)
    at ServerResponse.render (/Users/oas03/dice-game/node_modules/express/lib/response.js:1012:7)
    at /Users/oas03/dice-game/server.js:10:9
    at Layer.handle [as handle_request] (/Users/oas03/dice-game/node_modules/express/lib/router/layer.js:95:5)
    at next (/Users/oas03/dice-game/node_modules/express/lib/router/route.js:137:13)
    at Route.dispatch (/Users/oas03/dice-game/node_modules/express/lib/router/route.js:112:3)
    at Layer.handle [as handle_request] (/Users/oas03/dice-game/node_modules/express/lib/router/layer.js:95:5)
    at /Users/oas03/dice-game/node_modules/express/lib/router/index.js:281:22
    at Function.process_params (/Users/oas03/dice-game/node_modules/express/lib/router/index.js:335:12)

Кроме того, Heroku говорит, что мое приложение было успешно развернуто, но всякий раз, когда я нажимаю «открыть приложение» в пользовательском интерфейсе, я получаю это

application_error_heroku_ui

У кого-нибудь была эта проблема раньше? Буду признателен за любую помощь

ОБНОВЛЕНИЕ

Так что теперь я настроил ее так:

var path = require("path");
var express = require('express');
var app = express();

var port = process.env.PORT || 8080;

app.use(express.static('dice-game'));

//routes
app.get("/", function(req, res) {
    res.sendFile('index.html', { 
      root: path.join('dice-game', "dice-game") 
    });
})

app.listen(port, function() {
    console.log("app running");
})

Но я получаю Ошибка: ENOENT: такого файла или каталога нет, stat '/Users/oas03/dice-game/dice-game/dice-game/index.html'

Есть идея? @ Mark

Ответы [ 2 ]

0 голосов
/ 07 января 2020

Решено. Решением было импортировать каждое изображение PNG отдельно. Оно работает!

var path = require("path");
var express = require('express');
var app = express();

var port = process.env.PORT || 8080;

app.use(express.static('dice-game'));

//routes
app.get("/", function(req, res) {
    res.sendFile('index.html', { 
      root: __dirname
    });
})

//route
app.get("/style.css", function(req, res) {
  res.sendFile('style.css', { 
    root: __dirname
  });
})

//route
app.get("/dice-1.png", function(req, res) {
  res.sendFile('dice-1.png', { 
    root: __dirname
  });
})

//route
app.get("/app.js", function(req, res) {
  res.sendFile('app.js', { 
    root: __dirname
  });
})

//route
app.get("/dice-2.png", function(req, res) {
  res.sendFile('dice-2.png', { 
    root: __dirname
  });
})

//route
app.get("/dice-3.png", function(req, res) {
  res.sendFile('dice-3.png', { 
    root: __dirname
  });
})

//route
app.get("/dice-4.png", function(req, res) {
  res.sendFile('dice-4.png', { 
    root: __dirname
  });
})

//rout
app.get("/dice-5.png", function(req, res) {
  res.sendFile('dice-5.png', { 
    root: __dirname
  });
})

//route
app.get("/dice-6.png", function(req, res) {
  res.sendFile('dice-6.png', { 
    root: __dirname
  });
})

app.listen(port, function() {
    console.log("app running");
})
0 голосов
/ 06 января 2020

res.render("index"); используется с движком шаблонов, таким как руль или усы. Я предполагаю, что вы просто хотите отправить / отправить файл индекса. html. Используйте res.sendFile вместо

var path = require("path");
var express = require('express');
var app = express();

var port = process.env.PORT || 8080;

app.use(express.static('dice-game'));

//routes
app.get("/", function(req, res) {
    res.sendFile('index.html', { 
      root: path.join(__dirname, "dice-game") 
    });
})

app.listen(port, function() {
    console.log("app running");
})
...