如何用Node.js 做一个聊天室

做一个小小的聊天室,没事可以和自己的同学聊天,谈谈人生,下面介绍一下如何做一个聊天室

1.为了实时的获取服务器中的数据更新,可以使用轮训的方式解决问题,

 常见的请求方式   get:常用来获取数据;post:常用来新增数据,此操作会修改数据的内容;delete:常用来删除数据;

put:常用来修改数据;

# socket

双工通讯。当建立socket连接之后服务器端可以向客户端主动地推送消息,websocket技术实现了可以直接在浏览器中使用socket连接,可以实现网页的实时通信。现在nodejs中使用websocket的时候建议使用socket.io

介绍第一种方式,实现聊天室

首先需要初始化一个项目,利用脚本架生成一个app.js  ,代码如下

1.app.js

var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');

var indexRouter = require('./routes/index');
var usersRouter = require('./routes/users');

var app = express();

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');

app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));

app.use('/', indexRouter);
app.use('/users', usersRouter);
// app.use('/api/v1/chats', require('./routes/api/v1/chats'));

// app.get('/chat', (req, res) => {
//   res.render('chat')
// })

app.get('/chat-ws', (req, res) => {
  res.render('chat-ws');
})

// catch 404 and forward to error handler
app.use(function(req, res, next) {
  next(createError(404));
});

// 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');
});

module.exports = app;
2.然后需要建立很多项目文件夹

 bin models public routers views 

然后需要建立一个文件夹,来向服务器定时的访问数据,代码如下

function getAllMessages() {
  var strHrml = '

当前聊天室暂无人员发布消息
'
  $.getJSON('/api/v1/chats', function(messages) {
    strHrml = ''
    messages.forEach(function(message) {
      strHrml+= `
${message.nickName}:${message.content}
`
    })
    $('.chat-room').html(strHrml);
  })
}

function sendMsg() {
  if(!$('#txtNickName').val() && !$('#txt').val()) {
    alert('请输入昵称和消息内容!')
    return
  }
  $.post('/api/v1/chats', {
    nickName: $('#txtNickName').val(),
    content: $('#txt').val()
  }, function(res) {
    console.log(res);
    getAllMessages();
  })
}

// 初始化调用
getAllMessages();

setInterval(getAllMessages ,3000); // 轮训

最后建立一个Html文件来来向服务器发送数据

 


   

   


   

     
     
     
   

 

 2.第二种方式 用socket.io 来实现聊天室,客户端可以主动地向服务端发送数据

var server = http.createServer(app);
var io = require('socket.io')(server);
io.on('connection',  (socket)=> {
  console.log("连接成功!!")
    socket.on('sendMsg',(msg)=>{
        //console.log(msg)
        io.emit('receiveMsg',msg);
    })
});

首先你要引入socket.io,on代表监听,emit代表触发  ,然后向服务端发送数据。

接下来是实现客户端的代码

代码只是展示了设计的思想

欢迎大家提问

 

 

你可能感兴趣的:(如何用Node.js 做一个聊天室)