- 本项目是为了练习websocke全双工通信写的,运行之前必须安装nodejs环境、mongo数据库,然后用npm下载express、ejs、express-session、cookie-parser、socket.io、mongodb 模块
功能描述:
首页 、分类页 、汽车详情页 、聊天室页面 、登录页 、注册页 、个人中心
页面展示
image.png
image.png
image.png
image.png
image.png
image.png
image.png
项目目录
image.png
代码
具体代码下载地址:https://github.com/prettyRain/qichezhijiaNodejs.git
这里只展示两个关键js后台代码具体代码参考github
app.js
/**
* Created by prettyRain on 2019/1/22.
*/
var express = require('express');
var app = express();
app.use(express.static('./public'));
app.set('view engine','ejs');
var session = require('express-session');
var cookie = require('cookie-parser');
var router = require('./router/router.js');
app.use(session({
secret: '12345',
name: 'testapp', //这里的name值得是cookie的name,默认cookie的name是:connect.sid
cookie: {maxAge: 800000 }, //设置maxAge是80000ms,即80s后session和相应的cookie失效过期
resave: false,
saveUninitialized: true
}));
app.get("/",router.showIndex);
app.get('/categray',router.showCategray);
app.get('/goodsDetail',router.showGoodsDetail);
app.get('/regist',router.showRegist);
app.post('/doRegist',router.doRegist);
app.get('/login',router.showLogin);
app.post('/doLogin',router.doLogin);
app.get('/main',router.showMain);
app.get('/backLogin',router.backLogin);
app.get('/showChatroom',router.showChatroom);
app.get('/checklogin',router.checklogin);
//创建io公式
var server = require('http').Server(app);
var io = require('socket.io')(server);
io.on('connection',function(socket){
console.log("创建了一个连接");
socket.on("fabiao",function(msg){
console.log(msg);
router.addMessage(msg.username,msg.content,function(){
io.emit("zhanshi",{username:msg.username,content:msg.content});
});
})
})
server.listen(3000);
router.js
/**
* Created by prettyRain on 2019/1/22.
*/
var md5 = require('../model/md5.js');
var db = require('../model/db.js');
var formidable = require('formidable');
var util = require('util');
/**
* 首页
* @param req
* @param res
* @param next
*/
exports.showIndex = function(req,res,next){
if(req.session.login=="1"){
res.render('index',{username:req.session.username,login:req.session.login});
return;
}
res.render('index',{login:"-1"});
}
/**
* 展示分类
* @param req
* @param res
* @param next
*/
exports.showCategray = function(req,res,next){
if(req.session.login=="1"){
res.render('categray',{username:req.session.username,login:req.session.login});
return;
}
res.render('categray',{login:"-1"});
}
/**
* 展示商品详情
* @param req
* @param res
* @param next
*/
exports.showGoodsDetail = function(req,res,next){
if(req.session.login=="1"){
res.render('goodsDetail',{username:req.session.username,login:req.session.login});
return;
}
res.render('goodsDetail',{login:"-1"});
}
/**
* 展示注册页面
* @param req
* @param res
* @param next
*/
exports.showRegist = function(req,res,next){
res.render('regist',{});
}
/**
* 注册
* @param req
* @param res
* @param next
*/
exports.doRegist = function(req,res,next){
var form = new formidable.IncomingForm();
form.parse(req, function(err, fields, files) {
console.log(util.inspect({fields: fields, files: files}));
var username = fields.username;
var password = md5(fields.password);
db.find("users",{username:username},function(err,result){
if(result.length > 0){
//用户名被占用
res.send("-1");
return;
}
db.insertOne('users',{username:username,password:password},function(err,result){
if(err){
res.send("-2");
return;
}
req.session.username = username;
req.session.login = "1";
res.send("1");
})
})
})
}
/**
* 展示登录页面
* @param req
* @param res
* @param next
*/
exports.showLogin = function(req,res,next){
res.render('login',{});
}
/**
* 登录
* @param req
* @param res
* @param next
*/
exports.doLogin = function(req,res,next){
var form = new formidable.IncomingForm();
form.parse(req, function(err, fields, files) {
console.log(util.inspect({fields: fields, files: files}));
var username = fields.username;
var form_password = md5(fields.password);
db.find("users",{username:username},function(err,result){
if(result.length > 0){
var username = result[0].username;
var password = result[0].password;
if(form_password.toString().trim() == password.toString().trim()){
req.session.username = username;
req.session.login = "1";
res.send("1");
return;
}
//密码不正确
res.send("-2");
return;
}
//用户名不存在
res.send("-1");
})
})
}
/**
* 个人中心
* @param req
* @param res
* @param next
*/
exports.showMain = function(req,res,next){
if(!!req.session.login && req.session.login== '1'){
res.render('main',{username:req.session.username});
}else{
res.render('index',{login:"-1"});
}
}
/**
* 退出登录
* @param req
* @param res
* @param next
*/
exports.backLogin = function(req,res,next){
req.session.username = '';
req.session.login = "-1";
res.render('index',{login:"-1"});
}
/**
* 聊天室
* @param req
* @param res
* @param next
*/
exports.showChatroom = function(req,res,next){
db.find('message',{},function(err,result){
if(err || result.length < 1){
res.render('chatroom',{"data":"error"});
return;
}
res.render('chatroom',{"data":"success","messages":result});
})
}
/**
* 检查是否已登录
* @param req
* @param res
* @param next
*/
exports.checklogin = function(req,res,next){
if(!!req.session.login && req.session.login=='1'){
res.send({login:"1",username:req.session.username});
return;
}
res.send({login:"-1"});
}
/**
* 添加热聊数据
* @param username
* @param content
* @param callback
*/
exports.addMessage = function(username,content,callback){
db.insertOne('message',{username:username,content:content},function(err,result){
callback();
})
}












网友评论