Nodejs 做后台完整业务案例

大家知道js现在不仅仅可以写前端界面而且可以写后端的业务了,这样js就可以写一个全栈的项目。这里介绍一个nodejs + express + mongodb + bootstap 的全栈项目。

  1、安装必要的包,npm install express  npm install mongodb npm install ejs (需要使用什么工具,就安装哪个工具)

  2、建一个入口文件,index.js,这里主要是做路由的分发。启动:  node index.js

var express = require("express");// require express 的框架
var app = express(); // 实例化一个 express的对象
var router = require("./router/router.js"); // 引用 router 的文件,下面将介绍这个router
var session = require('express-session');// 使用了 express 一个 session 的工具,主要用作注册登录使用
var config = require("./config.js");// 引用一个配置文件


//使用session
app.use(session({
  secret: 'keyboard cat',
  resave: false,
  saveUninitialized: true,
}));

app.set("view engine","ejs");//  设置一个模版引擎, 渲染模版引擎是 ejs
app.use(express.static("./assets"));// 静态一个文件夹,实用的好处这里的文件的路径就可以 用  /  表示

app.get("/",router.index); // 后端分发的路由 "/" 表示主页 主页的业务代码逻辑在 router里的 index 的函数里

//我的发布
// app.get("/mypost", routerUser.list);
//search
// app.get("/search",routerSearch.list);

//执行登陆业务
app.post("/doLogin",router.doLogin);
app.post("/doCinemaSubmit",router.doCinemaSubmit);
//个人中心页

// app.get("/usercenter",router.showUserCenter);

app.get("/cinema/:targetId",router.showSelectPage);

app.post('/seatHandle', router.seatHandle)
//退出
app.get("/user_exit",router.logout);

//提交修改密码
app.post("/reviseMyMsg",router.reviseMyMsg);

app.listen(config.port, function () {
    console.log("项目启动成功: " + config.port);
});

3、处理后端业务数据逻辑的router,这里router 名字可以随便取,贴切的话可以 命名为 controller  或者 model  ,两个命名规范的业务划分,我统统集合在这个一个文件里。

//又提交,引入formidable
var formidable = require("formidable"); // 一个前台提交到后端接受数据的一个包,缺点: 没办法接受前端传来的数组数据
//引入封装好的db.js,从config走
var db = require("../model/db.js"); // 这里的解释转到4

var path = require("path");
var fs = require("fs");var mongo = require('mongodb');
var Ob = mongo.ObjectID;
var userData = {};

// post 请求的一种方式
//注册业务 这是一个post 的请求,接受前端传来的数据做业务处理,处理后返回前端    res.send('....')  前端ajax 获得一个返回状态,做前端数据处理
exports.doRegist = function (req,res,next) {
  var form = new formidable.IncomingForm();
  form.parse(req, function(err, fields, files) {
    var username = fields.username;
    var userpassword = fields.userpassword;
    var sharecode = fields.sharecode;
    // 邀请码
    if (!sharecode){
      res.send("-11");
      return;
    }
    if (!Ob.isValid(sharecode)){
      res.send("-11");
      return;
    }
    // sharecode = "59ac32bbab6a439ed60ebb74"; 测试用
    db.find(ds.SHARECODE, {"_id":mongo.ObjectID(sharecode)}, function(err, result){
      if (err){
        res.send("-11");
        return;
      }
      if (result.length == 0){
        res.send("-11");
        return;
      }
      db.find("users",{"username": username},function (err,result) {
        if(err) {
          res.send("-3");
          return;
        }
        if(result.length !=0) {//数据库查询到有数据占用
          res.send("-1");//被占用
          return;
        }
        //设置MD5加密
        userpassword = md5(md5(userpassword)+"adou");
        //返回result.length的长度为0,说明数据库中没有此名字
        db.insertOne("users",{
          "msgnum" : 0,
          "username" :  username,
          "userpassword" :  userpassword,
          "nickname" :  '',
          "avatar" : "/user/default.jpg"
        },function(err,result){
          if(err){
            res.send("-3");//服务器错误
            return;
          }
          refresh(req,res,username);
          // 删除此邀请码
          db.deleteMany(ds.SHARECODE, {"_id":mongo.ObjectID(sharecode)}, function(err, result){});
        });
      }); 
    });
  });
}
// //执行登录
exports.doLogin = function (req,res,next) {
  var form = new formidable.IncomingForm();
  form.parse(req, function(err, fields, files) {
    //表单数据
    var username = fields.username;
    var userpassword = fields.userpassword;
    userpassword_handel= md5(md5(userpassword)+"adou");
    db.find("users",{"username" : username},function(err,result){

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/f7b3c2b20207afc16b13b17f5cb74ec6.html