【问题标题】:No default engine facing error by express.jsexpress.js 没有默认引擎面临错误
【发布时间】:2018-02-17 18:29:18
【问题描述】:

您好,我正在尝试使用 socket.io 构建一个 MEAN 堆栈聊天应用程序,但我遇到了这个错误,我什至已经完成了 ng-build,但这最终无法解决我的错误

我正在攻击我的文件的代码,请有人帮忙看看到底是什么问题。

我的 app.js 看起来像这样:-

const path = require('path');
const express = require('express');
const ejs = require('ejs');
const favicon = require('serve-favicon');
const logger = require('morgan');
const mongoose = require('mongoose');

const bodyParser = require('body-parser');
var chat = require("./routes/chat");
var app = express();
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({'extended':'false'}));
app.use(express.static(path.join(__dirname, 'dist')));

app.use('/chat', chat);

// catch 404 and forward to error handler
app.use(function(req, res, next) {
  var err = new Error('Not Found');
  err.status = 404;
  next(err);
});

// error handler
app.use(function(err, req, res, next) {
  // set locals, only providing error in development
  res.locals.message = err.message;
  res.locals.error = req.app.get('env') === 'development' ? err : {};

  // render the error page
  res.status(err.status || 500);
  res.render('error');
});

mongoose.Promise = global.Promise;

mongoose.connect('mongodb://localhost/mean-chat')
.then(()=>console.log('connection successful'))
.catch((err)=>console.log(err));

module.exports = app;

我的 chat.js 看起来像这样

var express = require('express');
var router = express.Router();
var mongoose  = require('mongoose');
var app = express();
var io = require('socket.io')(server);
var server = require('http').createServer(app);

server.listen(4000);

// socket io
io.on('connection', function (socket) {
    console.log('User connected');
    socket.on('disconnect', function() {
      console.log('User disconnected');
    });
    socket.on('save-message', function (data) {
      console.log(data);
      io.emit('new-message', { message: data });
    });
  });

  /* GET ALL CHATS */
  router.get('/:room', function(req, res, next) {
    Chat.find({ room: req.params.room }, function (err, chats) {
      if (err) return next(err);
      res.json(chats);
    });
  });

  /* SAVE CHAT */
  router.post('/', function(req, res, next) {
    Chat.create(req.body, function (err, post) {
      if (err) return next(err);
      res.json(post);
    });
  });

router.get('/', function(req, res, next) {
  res.send('Express REST API');
});

module.exports = router;

当我尝试点击 url localhost:3000 时,它会显示我的 UI,这是绝对正确的

当我尝试点击我的 url localhost:3000/chat 时,它会显示

express 聊天 api 是正确的。

但是当我尝试访问 URL localhost:3000/book 或 localhost:3000/chat/book 时,我遇到了这样的错误

错误:未指定默认引擎且未提供扩展名。 在新视图 (D:\edWiseChatApp\node_modules\express\lib\view.js:61:11) 在 Function.render (D:\edWiseChatApp\node_modules\express\lib\application.js:570:12) 在 ServerResponse.render (D:\edWiseChatApp\node_modules\express\lib\response.js:1008:7) 在 D:\edWiseChatApp\app.js:33:7 在 Layer.handle_error (D:\edWiseChatApp\node_modules\express\lib\router\layer.js:71:5) 在 trim_prefix (D:\edWiseChatApp\node_modules\express\lib\router\index.js:315:13) 在 D:\edWiseChatApp\node_modules\express\lib\router\index.js:284:7 在 Function.process_params (D:\edWiseChatApp\node_modules\express\lib\router\index.js:335:12) 在下一个 (D:\edWiseChatApp\node_modules\express\lib\router\index.js:275:10) 在 Layer.handle_error (D:\edWiseChatApp\node_modules\express\lib\router\layer.js:67:12) 在 trim_prefix (D:\edWiseChatApp\node_modules\express\lib\router\index.js:315:13) 在 D:\edWiseChatApp\node_modules\express\lib\router\index.js:284:7 在 Function.process_params (D:\edWiseChatApp\node_modules\express\lib\router\index.js:335:12) 在下一个 (D:\edWiseChatApp\node_modules\express\lib\router\index.js:275:10) 在 Layer.handle_error (D:\edWiseChatApp\node_modules\express\lib\router\layer.js:67:12) 在 trim_prefix (D:\edWiseChatApp\node_modules\express\lib\router\index.js:315:13)

请有人帮忙解决这个问题,我想把这个评估交给面试官

【问题讨论】:

    标签: mean


    【解决方案1】:

    在您的错误处理程序中,您正在渲染一个 onError 视图。 你必须设置一个视图引擎来渲染你的视图。

    app.set('view engine', 'ejs')
    

    另外,您已经设置了您的视图目录。

    app.set('views', './viewsDirectory')
    

    【讨论】:

    • 什么是我的意见目录你能回答最后一个问题吗
    • 您似乎使用了express-generator。如果是,应该是'./views'
    • 我的应用程序中没有任何名称作为视图我使用了 Angular cli 应用程序生成器并遵循教程“djamware.com/post/58e0d15280aca75cdc948e4e/…
    • :( 没有帮助,它只是加载而已。带有 Get / --ms-- 的终端消息。
    • res.render('error') 更改为res.send('there was an error')
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-07
    • 1970-01-01
    • 2013-08-28
    • 1970-01-01
    • 2019-02-24
    • 1970-01-01
    相关资源
    最近更新 更多