Express.js

时间:2018-02-17 10:23:38

标签: mean

您好我正在尝试使用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绝对正确

当我尝试点击我的网址localhost:3000 / chat时显示

表达聊天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)

请帮助解决这个问题,我想把这个评估给面试官

1 个答案:

答案 0 :(得分:0)

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

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

此外,您还可以设置视图目录。

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