用Express、MySQL搭建项目(接口以及静态文件获取、文件上传等)
一、簡介
? ? 本文將主要基于node.js使用express框架搭建一個后臺環境,包括如何自定義項目目錄、所用依賴以及中間件、路由以及模板引擎、接口數據獲取以及文件上傳等內容。
二、后臺環境搭建? ?
? ? 1、新建一個目錄node,然后在目錄下跑命令:npm init,然后輸入一些版本信息;
? ? 2、安裝Express
? ? 運行指令:npm install express --save
? ? 3、在根目錄下新建一個server.js文件,然后在建立服務器然后監聽9999端口,輸出hello world!
const express = require('express')var app = express()app.get('/',function(req,res){res.send('hello world!') })app.listen(9999)在瀏覽器輸入http://localhost:9999就會顯示hello world!
三、數據準備,登錄注冊
1、這里使用MySQL數據庫與node.js鏈接。我用的是Navicat圖形化工具,當然用其他工具也可以,這里將做登錄、get列表數據、post文件上傳,分頁等功能。先在建立數據庫然后創建相應的表。
2、創建一個數據庫叫node,然后創建一個表user_table,有三個字段ID,username,password。
3、做一個注冊登錄功能
根目錄下新建一個route文件夾,便于管理路由路徑模塊管理,然后新建一個regLogin.js文件,然后定義router,引入MySQL,建立連接池,然后定義登錄跟注冊路由,然后導出路由;
const express = require('express'); const router = express.Router(); const mysql = require('mysql');//連接池 var db = mysql.createPool({host:'localhost',user:'root',password:'*******',database:'node'})// 定義網站主頁的路由router.use('/login', function(req, res) {var username = req.body.username;var password = req.body.password;db.query(`SELECT * FROM user_table WHERE username='${username}'`,(err,data)=>{if (err) {console.log(err);res.status(500).send('database error').end()}else{if (data[0].password==password) {res.send('登錄成功!')}}})});// 定義 about 頁面的路由router.use('/register', function(req, res) {var username = req.body.username;var password = req.body.password;db.query(`insert into user_table(username,password) values ('${username}','${password}')`,(err,data)=>{if (err) {console.log(err);res.status(500).send('database error').end()}else{res.send('注冊成功')}})});module.exports = router;4、在server.js里邊引入body-parser,body-parser可以自動轉換req數據為對象格式,然后使用express.static靜態文件托管
const express = require('express') const regLogin =require('./route/regLogin');//引入路由 const bodyParser = require('body-parser'); var app = express() app.use(bodyParser.urlencoded({ extended: false }))//使用路由 app.use('/', regLogin)//靜態文件托管 app.use(express.static('static'));app.listen(9999)5.在static靜態文件夾下新建以下文件
login.html對注冊跟登錄的post請求,代碼如下:
<!DOCTYPE html> <html> <head><meta charset="utf-8" /><meta http-equiv="X-UA-Compatible" content="IE=edge"><title>Login</title><script src="jquery.js"></script><script>window.onload=function(){//注冊 $('#register').click(function(){var name = $('#name').val();var pass = $('#password').val();$.ajax({type:'POST',url:'/register',data:{username:name,password:pass},success:function(res){alert('注冊成功')}})})//登錄 $('#login').click(function(){var name = $('#name').val();var pass = $('#password').val();$.ajax({type:'POST',url:'/login',data:{username:name,password:pass},success:function(res){alert('登錄成功')}})})}</script> </head> <body><div>用戶名:<input type="text" id="name"/><br/>密碼:<input type="text" id="password"/><br/><button id="login">登錄</button><button id="register">注冊</button></div> </body> </html>6.校驗
當輸入用戶名密碼,點擊注冊,則顯示注冊成功,數據庫多了一條用戶數據。
點擊登錄則顯示登錄成功。
四、文件上傳功能
?1、文件上傳功能需要依賴第三方中間件multer,當然multer有一些參數,可以選擇一次上傳單個文件,也可以上傳多個或者不限制,定義相應的輸出路徑等參數,詳情可以看下官方文檔https://www.npmjs.com/package/multer。這里首先在server.js里引入multer并設置參數:
const multer = require('multer'); //輸出文件路徑 const multerObj = multer({dest:'./static/upload'});app.use(multerObj.any())2、新建路由upload.js文件以及static目錄下的upload.html上傳文件,并在server.js中引入upload路由。
upload.js代碼如下:
const express = require('express'); const mysql = require('mysql'); const pathLib = require('path') const fs = require('fs')var router = express.Router();//連接池 var db = mysql.createPool({host:'localhost',user:'root',password:'*******',database:'node'});router.post('/',function(req,res){var title = req.body.title;if (req.files[0]) {var extName = pathLib.parse(req.files[0].originalname).ext;var oldName = req.files[0].path;var newName = req.files[0].path+extName;var newFileName = req.files[0].filename + extName;//重命名加上后綴fs.rename(oldName,newName,(err)=>{if (err) {console.log(err);res.status(500).end();}})db.query(`INSERT INTO upload_table (title,src) VALUES ('${title}','${newFileName}')`,(err,data)=>{if (err) {console.log(err);res.status(500).send('err').end()}else{res.send('上傳成功').end()}})} })module.exports = router;3、當選擇文件上傳,數據庫中就會多一天記錄
五、模板引擎
nodejs模板引擎比較常用的有jade跟ejs,jade跟我們平常時的HTML模板不兼容,而ejs跟我們平時所用的前端代碼而已結合使用,所以這里將介紹使用ejs,對jade感興趣的話也可以去了解了解。
1、首先,引入依賴consolidate,consolidate集成了很多模板引擎,可以選擇其中的某個模板引擎來使用,包括jade和ejs都在里邊。
2、在server.js引入consolidate然后定義相應渲染為HTML,然后在定義路徑渲染
const consolidate = require('consolidate'); var app = express()//模板 app.engine('html',consolidate.ejs); app.set('view engine','html'); app.set('views',__dirname + '/template');app.get('/index',function(req,res){res.render('index.ejs',{name:'smile',text:'這是后臺返回渲染數據',flag:true});//res.send('index') })3、在template文件夾中新建一個index.ejs,
<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>index</title> </head> <body><div class="warp"><% include components/header.ejs%><div>這是首頁<div>名稱:<%=name%></div><div>text:<%=text%></div><%if(flag){ %><div>這是flag等于true</div><% } %></div></div> </body> </html>4、最后渲染出來的頁面如下:
六、cookie跟session
1、要使用cookie以及session,得引入兩個依賴,cookie-parser,cookie-session,
2、使用cookie
var express = require('express') var cookieParser = require('cookie-parser')var app = express() app.use(cookieParser())app.get('/cookie', function(req, res) {console.log('Cookies: ', '這是返回的cookie') })3、使用session
var cookieSession = require('cookie-session') var express = require('express')var app = express()app.use(cookieSession({name: 'session',keys: ['key1','key2','key3'],//secret keys// Cookie OptionsmaxAge: 24 * 60 * 60 * 1000 // 24 hours }))七、express生成器
如果不愿意自己搭建項目架構,可以使用express生成器來快速創建一個應用的骨架。首先全局安裝 express-generator,再跑一些初始命令然后下載一些依賴就可以了,也是比較簡單,具體步驟參照下文檔就可以http://www.expressjs.com.cn/starter/generator.html。
?
轉載于:https://www.cnblogs.com/superSmile/p/8377171.html
總結
以上是生活随笔為你收集整理的用Express、MySQL搭建项目(接口以及静态文件获取、文件上传等)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PLSQL Developer使用大全
- 下一篇: unittest单元测试简单介绍