<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
本文範例為大家分享了node.js實現學生檔案管理的具體程式碼,供大家參考,具體內容如下
目標:模板引擎應用,強化node.js專案製作流程
知識點:http請求響應、資料庫、模板引擎、靜態資源存取
1、建立專案資料夾並生成專案描述檔案
2、建立網站伺服器實現使用者端和伺服器端通訊
3、連線資料庫並根據需求設計學員資訊表
4、建立路由並實現頁面模板呈遞
5、實現靜態資源存取
6、實現學生資訊新增功能
1).在模板的表單中指定請求地址與請求方式
2).為每一個表單項新增name屬性
3).新增實現學生資訊功能路由
4).接收使用者端傳遞過來的學生資訊
5).將學生資訊新增到資料庫中
6).將頁面重定向到學生資訊列表頁面
7、實現學生資訊展示功能
1).從資料庫中將所有的學生資訊查詢出來
2).通過模板引擎將學生信忠和HTML模板進行拼接
3).將拼接好的HTML模板響應給使用者端
connect.js
const mongoose = require('mongoose'); // 連線資料庫 mongoose.connect('mongodb://localhost/playground', { useNewUrlParser: true}) .then(() => console.log('連線資料庫成功') ).catch(() => console.log('連線資料庫失敗'))
user.js
const mongoose = require('mongoose'); // 建立學生集合規則 const studentsSchema = new mongoose.Schema({ name: { type: String, required: true, minlength: 2, maxlength: 10 }, age: { type: Number, min: 10, max: 25 }, sex: { type: String }, email: String, hobbies: [String], collage: String, enterDate: { type: Date, default: Date.now } }); // 建立學生學習集合 const Student = mongoose.model('Student',studentsSchema); // 將學生學習集合進行匯出 module.exports = Student;
list.css
body { padding: 0; margin: 0; } table { border-collapse: collapse; } table, td, th { text-align: center; line-height: 30px; border: 1px solid #CCC; } caption { font-weight: bold; font-size: 24px; margin-bottom: 10px; } table { width: 960px; margin: 50px auto; } a { text-decoration: none; color: #333; } a:hover { text-decoration: underline; color: #000; }
main.css
body { margin: 0; padding: 0 0 40px; background-color: #F7F7F7; font-family: '微軟雅黑'; } form { max-width: 640px; width: 100%; margin: 24px auto; font-size: 28px; } label { display: block; margin: 10px 10px 15px; font-size: 24px; } .normal { display: block; width: 100%; height: 40px; font-size: 22px; margin-top: 10px; padding: 6px 10px; color: #333; border: 1px solid #CCC; box-sizing: border-box; } .btn { margin-top: 30px; } .btn input { color: #FFF; background-color: green; border: 0 none; outline: none; cursor: pointer; } input[type="file"] { /*opacity: 0;*/ width: 120px; position: absolute; right: 0; z-index: 9; } .import { height: 40px; position: relative; }
index.js
// 引入router模組 const getRouter = require('router'); // 獲取路由物件 const router = getRouter(); // 引入模板引擎 const template = require('art-template'); // 學生學習集合 const Student = require('../model/user'); // 引入querystring const querystring = require('querystring'); // 呈遞學生檔案資訊頁面 router.get('/add',(req, res) => { let html = template('index.art', {}) res.end(html); }); // 呈遞學生檔案資訊列表頁面 router.get('/list', async(req, res) => { // 查詢學生資訊 let students = await Student.find(); console.log(students); let html = template('list.art', { students: students }) res.end(html); }); // 實現學生資訊新增路由功能 router.post('/add', (req, res) => { // 接受post請求引數 let formData = ''; req.on('data', param => { formData += param; }); req.on('end', async() => { await Student.create(querystring.parse(formData)); res.writeHead(301, { Location: '/list' }) res.end(); }) }) module.exports = router;
index.art
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no"> <title>學生檔案</title> <link rel="stylesheet" href="./css/main.css" > </head> <body> <form action="/add" method="post"> <fieldset> <legend>學生檔案</legend> <label> 姓名: <input class="normal" type="text" autofocus placeholder="請輸入姓名" name="name"> </label> <label> 年齡: <input class="normal" type="text" placeholder="請輸入年齡" name="age"> </label> <label> 性別: <input type="radio" value="0" name="sex"> 男 <input type="radio" value="1" name="sex"> 女 </label> <label> 郵箱地址: <input class="normal" type="text" placeholder="請輸入郵箱地址" name="email"> </label> <label> 愛好: <input type="checkbox" value="敲程式碼" name="hobbies"> 敲程式碼 <input type="checkbox" value="打籃球" name="hobbies"> 打籃球 <input type="checkbox" value="睡覺" name="hobbies"> 睡覺 </label> <label> 所屬學院: <select class="normal" name="collage"> <option value="前端與移動開發">前端與移動開發</option> <option value="PHP">PHP</option> <option value="JAVA">JAVA</option> <option value="Android">Android</option> <option value="IOS">IOS</option> <option value="UI設計">UI設計</option> <option value="C++">C++</option> </select> </label> <label> 入學日期: <input type="date" class="normal" name="enterDate"> </label> <label class="btn"> <input type="submit" value="提交" class="normal"> </label> </fieldset> </form> </body> </html>
list.art
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>學員資訊</title> <link rel="stylesheet" href="./css/list.css" > </head> <body> <table> <caption>學員資訊</caption> <tr> <th>姓名</th> <th>年齡</th> <th>性別</th> <th>郵箱地址</th> <th>愛好</th> <th>所屬學院</th> <th>入學時間</th> </tr> {{each students}} <tr> <th>{{$value.name}}</th> <th>{{$value.age}}</th> <th>{{$value.sex == '0' ? '男' : '女'}}</th> <th>{{$value.email}}</th> <th> {{each $value.hobbies}} <span>{{$value}}</span> {{/each}} </th> <th>{{$value.collage}}</th> <th>{{dateformat($value.enterDate, 'yyyy-mm-dd')}}</th> </tr> {{/each}} </table> </body> </html>
app.js
// 引入http模組 const http = require('http'); // 引入模板引擎 const template = require('art-template'); // 引入path模組 const path = require('path'); // 引入靜態資源存取模組 const serveStatic = require('serve-static'); // 引入處理日期的第三方模組 const dateformat = require('dateformat'); // 引入router const router = require('./route/index') // 實現靜態資源存取服務 const serve = serveStatic(path.join(__dirname, 'public')); // 設定模板的根目錄 template.defaults.root = path.join(__dirname, 'views'); // 處理日期格式的方法 template.defaults.imports.dateformat = dateformat; // 資料庫連線 require('./model/connect'); // 建立網站伺服器 const app = http.createServer(); // 當用戶端存取伺服器的時候 app.on('request', (req, res) => { // 啟用路由功能 router(req, res, () => {}) // 啟用靜態資源存取服務功能 serve(req, res, () => {}) }); app.listen(3000,() => { console.log('伺服器建立成功'); });
package.json(需要提前下載第三方模組)
{ "name": "14.students", "version": "1.0.0", "description": "", "main": "app.js", "scripts": { "test": "echo "Error: no test specified" && exit 1" }, "keywords": [], "author": "", "license": "ISC", "dependencies": { "art-template": "^4.13.2", "dateformat": "^3.0.3", "mongoose": "^5.9.18", "router": "^1.3.5", "serve-static": "^1.14.1" } } // art-template、dateformat、mongoose、router、serve-static
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援it145.com。
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45