開啟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>
效果:
-
注冊
-
數據庫表users
-
登錄