前言
最近在學習node.js,本來主要用的是Windows系統,但由於雲服務器上的是Linux系統,就決定直接在雲服務器上進行學習。一方面,可以很好的管理代碼,不用傳來傳去;另一方面,也可以更深層次的學習Linux系統命令。
本次開發系統環境爲:CentOS 6.5
環境安裝
node安裝
網上很多教程,我也是參考了很多教程後才裝好了的,主要要注意一下幾點:
- 支撐node所需環境的安裝
- 所安裝環境的版本
安裝時,注意權限控制
首先進行所需環境的安裝,主要有GCC,如已安裝,請更新到最新版本
安裝命令:
yum -y install gcc make gcc-c++ openssl-devel wget
進入所要安裝的目錄,一般進入/usr/local/,然後新建node目錄,命令爲:
進入目錄:cd /usr/local
新建node目錄:mkdir node
下載node資源包進行安裝:
wget http://nodejs.org/dist/v0.10.26/node-v0.10.26.tar.gz
tar -zvxf node-v0.10.26.tar.gz
編譯安make && make install否安裝成node -v mongodb 安裝
方法很多,可以用下載源碼進行編譯安裝,也可以進行直接下載二進制的配置運行,但最終我還是使用了yum方式安裝,感覺這樣更簡單些
yum install -y mongo-10gen mongo-10gen-server
查看安裝後的mongodb的配置文件,一般存在/etc/mongod.conf,直接用vi打開即可查看。
啓動mongodb服務
service mongod start
連接mongodb方式,需要進入連接客戶端位置,運行bin目錄下的mongo文件。
創建mongodb數據庫:
use web
創建所需表及添加數據
db.login.insert({uid:1,username:'admin',password:'admin',logins:0,logintime:'',loginip:''})
可以改變對應數據,多增加幾條數據,方便開發測試
代碼編寫
路由表編寫
初次編寫,我把路由和業務代碼都寫在了一起,主要入口文件爲app.js
主要使用到的技術爲:
- schema與model方式綁定mongodb數據庫表及進行數據庫操作
- node的express中jade引擎渲染視圖
- mongoose方式連接mongodb數據庫
app.js主要代碼爲:
var express = require('express');
var path = require('path');
var mongoose = require('mongoose');
var _ = require('underscore');
var Login = require('./models/login'); //調用Login的Models
var port = process.env.PORT || 8888; //node啓動端口綁定
var app = express();
var bodyParser = require('body-parser');
mongoose.connect('mongodb://localhost/web'); //mongoose方式連接mongodb連接字符串
app.set('views','./views/pages');
app.set('view engine','jade');
app.use(bodyParser.urlencoded({extended:false}));
app.use(bodyParser.json());
app.use(express.static(path.join(__dirname,'node_modules')));
app.listen(port);
console.log('web started on port '+ port);
//login page
app.get('/login',function(req,res){
res.render('login',{
title:'用戶登錄頁面'
});
});
//login post page
app.post('/login',function(req,res){
var username = req.body.username;
var password = req.body.password;
var loginObj = req.body;
var _login;
if(username !== 'undefined'){
Login.findById(username,function(err,login){
if(err){
console.log(err);
}
console.log(login)
_login = _.extend(login,loginObj);
if(login){
console.log('登錄成功!');
res.redirect('/'); //跳轉至主頁面
}else{
console.log('登錄失敗,請檢查用戶名或密碼!');
res.render('login',{
mes:'登錄失敗,請檢查用戶名或密碼!'
})
}
});
}
console.log(username);
});
//index page
app.get('/',function(req,res){
res.render('index',{
title:'MyWeb首頁'
})
});
//list page
app.get('/list',function(req,res){
Login.fetch(function(err,userlist){
if(err){
console.log(err);
}
console.log(userlist);
res.render('list',{
title:'list首頁',
users:userlist
});
});
});
//admin page
app.get('/admin',function(req,res){
res.render('admin',{
title:'admin首頁'
})
});
schema處理數據
schemas/login.js代碼:
var mongoose = require('mongoose');
var LoginSchema = new mongoose.Schema({
uid:String,
username:String,
password:String,
loginTime:Date,
logins:Number,
loginIp:String
});
LoginSchema.pre('save',function(next){
if(this.isNew){
this.loginTime = Date.now();
}
next();
});
LoginSchema.statics = {
findById:function(username,cb){
return this
.findOne({username:username})
.exec(cb);
},
fetch:function(cb){
return this.find({}).exec(cb);
}
}
module.exports = LoginSchema;
modles操作數據庫
models/login.js代碼:
var mongoose = require('mongoose');
var LoginSchema = require('../schemas/login');
var Login = mongoose.model('Login',LoginSchema);
module.exports = Login;
前端頁面代碼
前端頁面主要用jade引擎渲染,其中,login.jade的主要代碼爲:
extends ../layout
include ../style/login
block content
.container
.row
.col-md-5
.col-md-7
p.title #{sysname}用戶登錄
hr
.row
.col-md-12
.center
.panel.panel-default
.panel-body
form.form-horizontal(method="post",action="/login")
.form-group
label.col-sm-4.control-label(for="inputName") 用戶名
.col-sm-4
input#inputName.form-control(type="text",name="username")
.col-sm-4
.form-group
label.col-sm-4.control-label(for="inputpwd") 密碼
.col-sm-4
input#inputpwd.form-control(type="password",name="password")
.col-sm-4
p #{mes}
.form-group
.col-sm-4
.col-sm-4
include ../style/login
input.btn.btn-default.button(type="submit" value="登錄")
input.btn.btn-default.button(type="reset" value="重置")
.col-sm-4
注:jade代碼層級非常重要,要嚴格進行代碼縮進,否則會報錯
layout.jade的主要代碼爲:
doctype
html
head
meta(charset="utf-8")
meta(name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no")
title #{title}
include ./includes/head
body
include ./includes/header
block content
至此,大概完成了基本的登錄操作,對於其中處理登錄的業務代碼還不夠完善,值判斷了用戶名,沒進行密碼的驗證,後續將補上。
主要文件結構
根目錄
views目錄
其中,includes存放一些通用的塊,style放一些樣式塊,pages存放主要的頁面。