node 實現登錄、注冊


開啟node服務

項目結構

用到的數據庫

mongodb

項目目錄結構

  • db: 數據庫存儲目錄
  • models: 數據庫模型文件目錄
  • node_modules: node第三方模塊目錄
  • public: 公共文件目錄(js、css、image)
  • router: 路由文件目錄
  • views: 模板視圖文件目錄
  • app.js: 應用啟動入口文件

app.js

// 應用程序啟動入口文件
var mongoose = require('mongoose');
// 加載express模塊
var express = require('express');
//加載模板處理模塊
var swig = require('swig');
// 創建app應用=>NodeJS Http.createServer();
var app = express();
var bodyParser = require('body-parser');
// 設置靜態文件托管
// 當用戶訪問的url以public開頭
app.use('/public', express.static(__dirname + '/public'));
// 定義當前應用所使用的模板引擎
// 第一個參數,模板引擎的名稱,同時也是模板引擎的后綴,第二個參數表示用於解析處理模板內容的方法
app.engine('html', swig.renderFile);
// 設置模板文件存放的目錄,第一個參數必須是views,第二個參數是目錄
app.set('views', './views');
// 注冊所使用的模板引擎,第一個參數必須是view engine,第二個參數和app.engine這個方法定義的模板引擎名稱一致
app.set('view engine', 'html');
// 在開發過程中,取消緩存限制
swig.setDefaults({
    cache: false
});

app.use(bodyParser.urlencoded({
    extended: true
}));
// 根據不同的功能划分模塊
// 普通調用加載文字
app.use('/admin', require('./routers/admin'));
// 加載實現功能
app.use('/api', require('./routers/api'));
// 加載路由
app.use('/', require('./routers/main'));

// app.get('/', function (req, res, next) {
//     // res.send('<h1>歡迎光臨!</h1>');
//     /*
//         讀取views目錄下的指定文件,解析並返回到客戶端
//         第一個參數,表示模板的文件,相對於views目錄 views/index
//         第二個參數,傳遞給模板使用的數據
//     */
//     res.render('index');
// });

// app.get('/main.css', function (req, res, next) {
//     res.setHeader('content-type', 'text/css');
//     res.send('body {background: red;}');
// });
// 監聽http請求,鏈接數據庫,默認27017
mongoose.connect('mongodb://localhost:27018/blog', function (err) {
    if (err) {
        console.log('數據庫連接失敗');
    } else {
        console.log('數據庫連接成功');
        app.listen(8088);
    }
});

models

// 數據庫操作集合;包含scheme、model等的聲明、定義等;
var mongoose = require('mongoose');
var userSchema = require('../schemas/users');

module.exports = mongoose.model('User', userSchema);

routers

user.js

// 加載express模塊
var express = require('express');
var router = express.Router();
// 路由輸入user加載User文字
router.get('/user', function (req, res, next) {
    res.send('User');
});

module.exports = router;

main.js

// 加載express模塊
// 加載express模塊
var express = require('express');
var router = express.Router();
// 根據路由加載想要跳轉到的頁面
router.get('/register', function (req, res, next) {
    res.render('main/register');
});
router.get('/login', function (req, res, next) {
    res.render('main/login');
});
module.exports = router;

api.js

// 加載express模塊
var express = require('express');
var router = express.Router();
var User = require('../models/User');

// 統一返回格式
var resData;
router.use(function (req, res, next) {
    resData = {
        code: 0,
        message: ''
    }
    next();
});
// 用戶注冊
router.post('/user/register', function (req, res, next) {
    //console.log(req.body);
    var userName = req.body.userName;
    var pwd = req.body.pwd;
    if (!userName) {
        resData.code = 1;
        resData.message = '用戶名不能為空';
        return res.json(resData);
    }
    if (!pwd) {
        resData.code = 2;
        resData.message = '密碼不能為空';
        res.json(resData);
    }
    User.findOne({
        userName: userName
    }).then(function (userInfo) {
        console.log(userInfo);
        // 如果存在說明數據庫有這條記錄
        if (userInfo) {
            resData.code = 4;
            resData.message = '用戶名已被注冊';
            return res.json(resData);
        }
        // 新建文檔對象實例,保存用戶的信息到數據庫中
        var user = new User({
            userName: userName,
            pwd: pwd
        });
        return user.save();
    }).then(function (newUserInfo) {
        console.log(newUserInfo);
        resData.code = 0;
        resData.message = '注冊成功';
        res.json(resData);
    });
});
// 用戶登錄
router.post('/user/login', function (req, res, next) {
    //console.log(req.body);
    var userName = req.body.userName;
    var pwd = req.body.pwd;
    if (!userName) {
        resData.code = 1;
        resData.message = '用戶名不能為空';
        return res.json(resData);
    }
    if (!pwd) {
        resData.code = 2;
        resData.message = '密碼不能為空';
        res.json(resData);
    }
    // 查詢數據庫是否存在
    User.findOne({
        userName: userName,
        pwd: pwd
    }).then(function (userInfo) {
        // 如果存在說明數據庫有這條記錄
        console.log(userInfo, 9);
        if (!userInfo) {
            resData.code = 4;
            resData.message = '用戶名或密碼錯誤';
            return res.json(resData);
        }
        resData.message = "登錄成功";
        return res.json(resData);
    });
});
module.exports = router;

schmas

users.js

var mongoose = require('mongoose');
var schema = mongoose.Schema;
// 加載字段
module.exports = new schema({
    // 用戶名
    userName: String,
    // 密碼
    pwd: String,
})

views

login.html

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <link rel="stylesheet" href="/public/main.css">
    <script src="/public/js/jquery.min.js"></script>
    <script>
        $(function () {
            $("#btnLogin").click(function () {
                $.ajax({
                    type: 'post',
                    url: 'api/user/login',
                    data: {
                        userName: $("#userName").val(),
                        pwd: $("#pwd").val(),
                    },
                    dataType: 'json',
                    success: function (result) {
                        console.log(result);
                    }
                });
            });
        });
    </script>
</head>

<body>
    <input type="text" name="userName" id="userName">
    <input type="text" name="pwd" id="pwd">
    <input type="button" id="btnLogin" value="登錄">
</body>

</html>

register.html

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <link rel="stylesheet" href="/public/main.css">
    <script src="/public/js/jquery.min.js"></script>
    <script>
        $(function () {
            $("#btnRegister").click(function () {
                $.ajax({
                    type: 'post',
                    // 調用api下面的user/register方法
                    url: 'api/user/register',
                    data: {
                        userName: $("#userName").val(),
                        pwd: $("#pwd").val(),
                    },
                    dataType: 'json',
                    success: function (result) {
                        console.log(result);
                    }
                });
            });
        });
    </script>
</head>

<body>
    <input type="text" name="userName" id="userName">
    <input type="text" name="pwd" id="pwd">
    <input type="button" id="btnRegister" value="注冊">
</body>

</html>

效果:

  1. 注冊

  2. 數據庫表users

  3. 登錄


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM