1 // 1. 引入 express 2 var express = require('express'); 3 var formidable = require('formidable'); 4 var mysql = require('mysql'); 5 var session = require('express-session'); 6 var cookieParser = require('cookie-parser'); 7 8 // 2. 实例化。 9 var app = express(); 10 11 // 配置。 12 app.use(express.static('node_modules')); 13 app.use(cookieParser()); 14 app.use(session({ 15 secret:'randomstring', 16 resave: false, 17 saveUninitialized:true, 18 cookie:{ 19 maxAge:600000, 20 hostOnly:true 21 } 22 })); 23 24 25 26 // 设置 27 app.set('view engine', 'ejs'); 28 app.set('views', './views'); 29 30 31 32 // 3. 路由配置。 33 // 登录。 34 app.get('/admin/login', function(req, res){ 35 // res.send('ok'); 36 37 // console.log(req.session.info); 38 39 // 解析模板。 40 res.render('admin-login'); 41 42 }); 43 app.post('/admin/login', function(req, res){ 44 45 // req.session.info = null; 46 // 判断是否有 cookie 47 if(req.cookies.rememberme && req.session.admin){ 48 res.redirect('/admin/index'); 49 } 50 51 52 // 实例化。 53 var form = new formidable.IncomingForm(); 54 55 // 表单处理。 56 form.parse(req, function(error, fields, files){ 57 // console.log(fields); 58 // 获取用户名 密码。 59 var name = fields.name; 60 var password = fields.password; 61 var rememberme = fields.rememberme; 62 // console.log(rememberme); 63 64 // 查询数据库。 65 var con = mysql.createConnection({ 66 host:"localhost", 67 user:"root", 68 password:"", 69 database:"php183" 70 }); 71 // 连接。 72 con.connect(); 73 // 执行查询。 74 con.query("SELECT * FROM users WHERE name='"+ name +"'", function(err, results, fields){ 75 // console.log(results); 76 // res.send('ok'); 77 78 if(results.length <= 0){ 79 res.send('没有这个用户'); 80 return ; 81 } 82 83 // 判断密码。 84 if(results[0].password != password){ 85 req.session.info = '密码错误!'; 86 res.redirect('/admin/login'); 87 }else { 88 89 // 判断是否记住我。 90 if(rememberme == 'on') 91 { 92 console.log(111); 93 res.cookie('rememberme', 1, {maxAge: 600000, hostOnly:true}); 94 } 95 96 // 将用户数据存入 session 97 req.session.admin = results[0]; 98 99 // 跳转后台主页 100 res.redirect('/admin/index'); 101 } 102 }); 103 104 con.end(); 105 return ; 106 107 }); 108 109 110 111 // res.send('ok'); 112 }); 113 114 app.get("/admin/index", function(req, res){ 115 // 判断 session 116 if(!req.session.admin) 117 { 118 res.redirect('/admin/login'); 119 return ; 120 } 121 122 res.render('admin-index', {session:req.session}); 123 124 }); 125 126 // 文章管理 127 app.get('/admin/article/add', function(req, res){ 128 // res.send('add') 129 130 res.render('admin-article-add'); 131 }); 132 app.post('/admin/article/insert', function(req, res){ 133 134 // 实例化。 135 var form = new formidable.IncomingForm(); 136 137 // 表单处理。 138 form.parse(req, function(error, fields, files){ 139 // console.log(fields); 140 var title = fields.title; 141 var content = fields.content; 142 143 144 // 查询数据库。 145 var con = mysql.createConnection({ 146 host:"localhost", 147 user:"root", 148 password:"", 149 database:"php183" 150 }); 151 // 连接。 152 con.connect(); 153 // 执行查询。 154 con.query("INSERT INTO articles(title,content) VALUES('"+ title +"','"+ content +"')", function(err, results, fields){ 155 // console.log(results); 156 if(results.affectedRows > 0) 157 { 158 res.redirect('/admin/article/add'); 159 return ; 160 }else{ 161 res.redirect('/admin/article/add'); 162 return ; 163 } 164 165 }); 166 167 con.end(); 168 return ; 169 }); 170 171 172 // res.send('insert') 173 }); 174 app.get('/admin/article/edit/:id([0-9]+)', function(req, res){ 175 // 获取 id 176 var id = req.params.id; 177 var p = req.query.p; 178 console.log(p); 179 // 查询数据库。 180 var con = mysql.createConnection({ 181 host:"localhost", 182 user:"root", 183 password:"", 184 database:"php183" 185 }); 186 // 连接。 187 con.connect(); 188 // 执行查询。 189 con.query("SELECT * FROM articles WHERE id="+ id, function(err, results, fields){ 190 // console.log(results); 191 res.render('admin-article-edit', {data:results[0],p:p}); 192 193 }); 194 195 con.end(); 196 return ; 197 198 199 200 }); 201 app.post('/admin/article/update', function(req, res){ 202 203 // 接收 204 var p = req.query.p; 205 // 实例化。 206 var form = new formidable.IncomingForm(); 207 208 // 表单处理。 209 form.parse(req, function(error, fields, files){ 210 // console.log(fields); 211 var id = fields.id; 212 var title = fields.title; 213 var content = fields.content; 214 215 216 // 查询数据库。 217 var con = mysql.createConnection({ 218 host:"localhost", 219 user:"root", 220 password:"", 221 database:"php183" 222 }); 223 // 连接。 224 con.connect(); 225 // 执行查询。 226 con.query("UPDATE articles SET title='"+ title +"',content='"+ content +"' WHERE id="+id, function(err, results, fields){ 227 // console.log(results); 228 if(results.affectedRows > 0) 229 { 230 res.redirect('/admin/article/index/'+ p); 231 return ; 232 }else{ 233 res.redirect('/admin/article/edit/'+ id); 234 return ; 235 } 236 237 }); 238 239 con.end(); 240 return ; 241 }); 242 243 244 245 246 // res.send('update'); 247 }); 248 app.get('/admin/article/delete/:id([0-9]+)', function(req, res){ 249 var id = req.params.id; 250 var p = req.query.p; 251 252 // 查询数据库。 253 var con = mysql.createConnection({ 254 host:"localhost", 255 user:"root", 256 password:"", 257 database:"php183" 258 }); 259 // 连接。 260 con.connect(); 261 // 执行查询。 262 con.query("DELETE FROM articles WHERE id="+id, function(err, results, fields){ 263 // console.log(results); 264 if(results.affectedRows > 0) 265 { 266 res.redirect('/admin/article/index/'+ p); 267 return ; 268 }else{ 269 res.redirect('/admin/article/edit/'+ id); 270 return ; 271 } 272 273 }); 274 275 con.end(); 276 return ; 277 278 }); 279 app.get('/admin/article/index/:p([0-9]+)', function(req, res){ 280 281 var p = req.params.p; 282 if(typeof(p) == 'undefined') 283 { 284 p = 1; 285 } 286 var num = 2; 287 var total = 0; 288 // 根据 p 处理需要的参数。 289 // 0,10 290 // 10,10 291 var start = (p-1)*num; 292 var end = num; 293 var limit = start + ',' + end; 294 295 296 // 查询数据库。 297 var con = mysql.createConnection({ 298 host:"localhost", 299 user:"root", 300 password:"", 301 database:"php183" 302 }); 303 // 连接。 304 con.connect(); 305 // 执行查询数据总条数。 306 con.query({sql: 'SELECT COUNT(*) AS count FROM articles', timeout: 60000}, function (error, results, fields) { 307 if (error && error.code === 'PROTOCOL_SEQUENCE_TIMEOUT') { 308 throw new Error('too long to count table rows!'); 309 } 310 311 if (error) { 312 throw error; 313 } 314 315 total = results[0].count; 316 }); 317 318 319 // 执行查询。 320 con.query("SELECT * FROM articles LIMIT "+ limit, function(err, results, fields){ 321 // console.log(results); 322 // res.send('111'); 323 324 res.render('admin-article-index', {data:results,total:total,num:num,p:p}); 325 326 }); 327 328 con.end(); 329 return ; 330 331 // res.send('index'); 332 }); 333 334 // 4. 监听。 335 app.listen(3000);