前端的Ajax代碼:
/**
* Created by Administrator on 2018/4/17.
*/
$(function() {
var $loginBox = $('#loginBox');
var $registerBox = $('#registerBox');
var $userInfo = $('#userInfo');
//切換到注冊面板
$loginBox.find('a.colMint').on('click', function() {
$registerBox.show();
$loginBox.hide();
});
//切換到登錄面板
$registerBox.find('a.colMint').on('click', function() {
$loginBox.show();
$registerBox.hide();
});
//注冊
$registerBox.find('button').on('click', function() {
//通過ajax提交請求
$.ajax({
type: 'post',
url: '/api/user/register',
data: {
username: $registerBox.find('[name="username"]').val(),
password: $registerBox.find('[name="password"]').val(),
repassword: $registerBox.find('[name="repassword"]').val()
},
dataType: 'json',
success: function(result) {
$registerBox.find('.colWarning').html(result.message);
if (!result.code) {
//注冊成功
setTimeout(function() {
$loginBox.show();
$registerBox.hide();
}, 1000);
}
}
});
});
//登錄
$loginBox.find('button').on('click', function() {
//通過ajax提交請求
$.ajax({
type: 'post',
url: '/api/user/login',
data: {
username: $loginBox.find('[name="username"]').val(),
password: $loginBox.find('[name="password"]').val()
},
dataType: 'json',
success: function(result) {
$loginBox.find('.colWarning').html(result.message);
if (!result.code) {
//登錄成功
setTimeout(function() {
window.location.reload();
}, 1000);
}
}
})
})
//退出
$('#logout').on('click', function() {
$.ajax({
url: '/api/user/logout',
success: function(result) {
if (!result.code) {
window.location.reload();
}
}
});
})
})
后端的app.js
/**
* Created by Administrator on 2018/4/16.
* 應用程序的啟動(入口)文件
*/
//加載express模塊
var express = require('express');
//加載模板處理模塊
var swig = require('swig');
//加載數(shù)據(jù)庫
var mongoose = require('mongoose');
//加載body-parser,用來處理post提交過來的數(shù)據(jù)
var bodyParser = require('body-parser');
//加載cookies模塊
var cookieParser = require('cookie-parser')
//創(chuàng)建app應用=>NodeHS Http.createServer()
var app = express();
//設置靜態(tài)文件托管
//當用戶訪問的url以/public開始,那么直接返回對應__dirname + '/public'下的文件
app.use('/public', express.static(__dirname + '/public'));
// app.use('/static', express.static('public'));
//配置應用模板
//定義當前應用所使用的模板引擎
//第一個參數(shù),模板引擎的名稱,同時也是模板文件的后綴,第二個參數(shù)表示用于解析處理模板內容的方法
app.engine('html', swig.renderFile);
//設置模板文件存放的目錄,第一個參數(shù)必須是views,第二個參數(shù)是目錄
app.set('views', './views');
/*注冊所使用的模板引擎,第一個參數(shù)必須是view engine,第二個參數(shù)和app.engine這個方法中定義的模板引擎的名稱(第一個參數(shù))是一致的*/
app.set('view engine', 'html');
//在開發(fā)過程中,需要取消模板緩存
swig.setDefaults({cache: false});
//bodyparser設置
app.use( bodyParser.urlencoded({extended:true}) );
app.use( function(req, res, next) {
req.cookies = new cookieParser(req, res);
//解析登錄用戶的cookie信息
req.userInfo = {};
if (req.cookies.get('userInfo')) {
try {
req.userInfo = JSON.parse(req.cookies.get('userInfo'));
//獲取當前登錄用戶的類型,是否是管理員
User.findById(req.userInfo._id).then(function(userInfo) {
req.userInfo.isAdmin = Boolean(userInfo.isAdmin);
next();
})
}catch(e){
next();
}
} else {
next();
}
} );
/*
* 根據(jù)不同的功能劃分模塊
* */
app.use('/admin', require('./routers/admin'));
app.use('/api', require('./routers/api'));
app.use('/', require('./routers/main'));
//監(jiān)聽http請求
mongoose.connect('mongodb://localhost:27017/blog',function (err) {
if(err){
console.log('數(shù)據(jù)庫連接失敗');
}else{
console.log('數(shù)據(jù)庫連接成功');
app.listen(8081);
}
});
// app.listen(8081);
api.js
/**
* Created by Administrator on 2018/4/16.
*/
var express = require('express');
var router = express.Router();
var User = require('../models/User');
//統(tǒng)一返回格式
var responseData;
router.use(function (req, res, next) {
responseData = {
code: 0,
message:''
}
next();
});
/*
* 用戶注冊
* 注冊邏輯
*
* 1.用戶名不能為空
* 2.密碼不能為空
* 3.兩次輸入密碼必須一致
*
* 1.用戶名是否已經(jīng)被注冊
* 數(shù)據(jù)庫查詢
* */
router.post('/user/register', function (req, res, next) {
var username = req.body.username;
var password = req.body.password;
var repassword = req.body.repassword;
//用戶名是否為空
if(username == ''){
responseData.code = 1;
responseData.message = '用戶名不能為空';
res.json(responseData);
return;
}
//密碼不能為空
if(password == ''){
responseData.code = 2;
responseData.message = '密碼不能為空';
res.json(responseData);
return;
}
// 兩次輸入的密碼不一致
if(password != repassword){
responseData.code = 3;
responseData.message = '兩次輸入的密碼不一致';
res.json(responseData);
return;
}
//用戶名是否已經(jīng)被注冊了,如果數(shù)據(jù)庫中存在和我們要注冊的用戶名同名的數(shù)據(jù),表示改用戶名已經(jīng)被注冊了
User.findOne({
username: username
}).then(function (userInfo) {
if( userInfo){
//表示數(shù)據(jù)庫中有改記錄
responseData.code = 4;
responseData.message = '用戶名已經(jīng)被注冊了'
res.json(responseData);
return;
}
//保存用戶注冊的信息到數(shù)據(jù)庫中
var user = new User({
username: username,
password: password
});
return user.save();
}).then(function (newUserInfo) {
responseData.message = '注冊成功';
res.json(responseData);
});
});
router.post('/user/login', function (req, res, next) {
var username = req.body.username;
var password = req.body.password;
if( username == ''|| password ==''){
responseData.code = 1;
responseData.message = '用戶名和密碼不能為空';
res.json(responseData);
return;
}
//查詢數(shù)據(jù)庫中相同用戶名和密碼的記錄是否存在,如果存在則登陸成功
User.findOne({
username: username,
password: password
}).then(function (userInfo) {
if(!userInfo){
responseData.code = 2;
responseData.message = '用戶名或密碼錯誤';
res.json(responseData);
return;
}
//用戶名和密碼是正確的
responseData.message = '登錄成功';
responseData.userInfo = {
_id: userInfo._id,
username: userInfo.username
}
req.cookies.set('userInfo', JSON.stringify({
_id: userInfo._id,
username: userInfo.username
}));
res.json(responseData);
return;
})
});
/*
* 退出
* */
router.get('/user/logout', function(req, res) {
req.cookies.set('userInfo', null);
res.json(responseData);
});
module.exports = router;
報錯問題:
TypeError: req.cookies.get is not a function
at D:\WorkSpace\WebStorm\project\app.js:42:21
at Layer.handle [as handle_request] (D:\WorkSpace\WebStorm\project\node_modules\express\lib\router\layer.js:95:5)
at trim_prefix (D:\WorkSpace\WebStorm\project\node_modules\express\lib\router\index.js:317:13)
at D:\WorkSpace\WebStorm\project\node_modules\express\lib\router\index.js:284:7
at Function.process_params (D:\WorkSpace\WebStorm\project\node_modules\express\lib\router\index.js:335:12)
at next (D:\WorkSpace\WebStorm\project\node_modules\express\lib\router\index.js:275:10)
at urlencodedParser (D:\WorkSpace\WebStorm\project\node_modules\body-parser\lib\types\urlencoded.js:91:7)
at Layer.handle [as handle_request] (D:\WorkSpace\WebStorm\project\node_modules\express\lib\router\layer.js:95:5)
at trim_prefix (D:\WorkSpace\WebStorm\project\node_modules\express\lib\router\index.js:317:13)
at D:\WorkSpace\WebStorm\project\node_modules\express\lib\router\index.js:284:7
at Function.process_params (D:\WorkSpace\WebStorm\project\node_modules\express\lib\router\index.js:335:12)
at next (D:\WorkSpace\WebStorm\project\node_modules\express\lib\router\index.js:275:10)
at expressInit (D:\WorkSpace\WebStorm\project\node_modules\express\lib\middleware\init.js:40:5)
at Layer.handle [as handle_request] (D:\WorkSpace\WebStorm\project\node_modules\express\lib\router\layer.js:95:5)
at trim_prefix (D:\WorkSpace\WebStorm\project\node_modules\express\lib\router\index.js:317:13)
at D:\WorkSpace\WebStorm\project\node_modules\express\lib\router\index.js:284:7
北大青鳥APTECH成立于1999年。依托北京大學優(yōu)質雄厚的教育資源和背景,秉承“教育改變生活”的發(fā)展理念,致力于培養(yǎng)中國IT技能型緊缺人才,是大數(shù)據(jù)專業(yè)的國家
北大青鳥中博軟件學院創(chuàng)立于2003年,作為華東區(qū)著名互聯(lián)網(wǎng)學院和江蘇省首批服務外包人才培訓基地,中博成功培育了近30000名軟件工程師走向高薪崗位,合作企業(yè)超4
中公教育集團創(chuàng)建于1999年,經(jīng)過二十年潛心發(fā)展,已由一家北大畢業(yè)生自主創(chuàng)業(yè)的信息技術與教育服務機構,發(fā)展為教育服務業(yè)的綜合性企業(yè)集團,成為集合面授教學培訓、網(wǎng)
達內教育集團成立于2002年,是一家由留學海歸創(chuàng)辦的高端職業(yè)教育培訓機構,是中國一站式人才培養(yǎng)平臺、一站式人才輸送平臺。2014年4月3日在美國成功上市,融資1
曾工作于聯(lián)想擔任系統(tǒng)開發(fā)工程師,曾在博彥科技股份有限公司擔任項目經(jīng)理從事移動互聯(lián)網(wǎng)管理及研發(fā)工作,曾創(chuàng)辦藍懿科技有限責任公司從事總經(jīng)理職務負責iOS教學及管理工作。
浪潮集團項目經(jīng)理。精通Java與.NET 技術, 熟練的跨平臺面向對象開發(fā)經(jīng)驗,技術功底深厚。 授課風格 授課風格清新自然、條理清晰、主次分明、重點難點突出、引人入勝。
精通HTML5和CSS3;Javascript及主流js庫,具有快速界面開發(fā)的能力,對瀏覽器兼容性、前端性能優(yōu)化等有深入理解。精通網(wǎng)頁制作和網(wǎng)頁游戲開發(fā)。
具有10 年的Java 企業(yè)應用開發(fā)經(jīng)驗。曾經(jīng)歷任德國Software AG 技術顧問,美國Dachieve 系統(tǒng)架構師,美國AngelEngineers Inc. 系統(tǒng)架構師。