一、路由设计

二、处理路由模块

三、代码

views-edit:

<!doctype html>
<html lang="zh-CN"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1"><!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags --><meta name="description" content=""><meta name="author" content=""><link rel="icon" href="https://cdn.jsdelivr.net/npm/@bootcss/v3.bootcss.com@1.0.14/favicon.ico"><link rel="canonical" href="https://getbootstrap.com/docs/3.4/examples/dashboard/"><title>NODE CURD</title><!-- Bootstrap core CSS --><link href="https://cdn.jsdelivr.net/npm/@bootcss/v3.bootcss.com@1.0.14/dist/css/bootstrap.min.css"rel="stylesheet"><!-- IE10 viewport hack for Surface/desktop Windows 8 bug --><link href="https://cdn.jsdelivr.net/npm/@bootcss/v3.bootcss.com@1.0.14/assets/css/ie10-viewport-bug-workaround.css"rel="stylesheet"><!-- Custom styles for this template --><link href="https://cdn.jsdelivr.net/npm/@bootcss/v3.bootcss.com@1.0.14/examples/dashboard/dashboard.css"rel="stylesheet"><!-- <link href="/public/css/main.css" rel="stylesheet"> --><!-- Just for debugging purposes. Don't actually copy these 2 lines! --><!--[if lt IE 9]><script src="https://cdn.jsdelivr.net/npm/@bootcss/v3.bootcss.com@1.0.14/assets/js/ie8-responsive-file-warning.js"></script><![endif]--><scriptsrc="https://cdn.jsdelivr.net/npm/@bootcss/v3.bootcss.com@1.0.14/assets/js/ie-emulation-modes-warning.js"></script><!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries --><!--[if lt IE 9]><script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script><script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script><![endif]-->
</head><body><div class="container-fluid"><div class="row"><div class="col-sm-3 col-md-2 sidebar"><ul class="nav nav-sidebar"><li class="active"><a href="#">Overview <span class="sr-only">(current)</span></a></li><li><a href="#">Reports</a></li><li><a href="#">Analytics</a></li><li><a href="#">Export</a></li></ul><ul class="nav nav-sidebar"><li><a href="">Nav item</a></li><li><a href="">Nav item again</a></li><li><a href="">One more nav</a></li><li><a href="">Another nav item</a></li><li><a href="">More navigation</a></li></ul><ul class="nav nav-sidebar"><li><a href="">Nav item again</a></li><li><a href="">One more nav</a></li><li><a href="">Another nav item</a></li></ul></div><div class="col-sm-9 col-sm-offset-3 col-md-10 col-md-offset-2 main"><h1 class="page-header">NODE CURD</h1><h2 class="sub-header">添加学生</h2><form action="/students/edit" method="POST"><input type="hidden" value="{{student.id}}" name="id"><div class="form-group"><label for="exampleInputEmail1">姓名</label><input type="text" class="form-control" id="" placeholder="name" name="name" value="{{student.name}}"></div><div class="form-group"><label for="gender">性别</label><label class="radio-inline"><input type="radio" name="gender" id="" value="0"> 男</label><label class="radio-inline"><input type="radio" name="gender" id="" value="1"> 女</label></div><div class="form-group"><label for="exampleInputFile">年龄</label><input type="number" class="form-control" id="" name="age" value="{{student.age}}"></div><div class="form-group"><label for="gender">爱好 </label><input type="text" class="form-control" name="hobbies"  value="{{student.hobbies}}"></div><button type="submit" class="btn btn-default">Submit</button></form></div></div></div><!-- Bootstrap core JavaScript================================================== --><!-- Placed at the end of the document so the pages load faster --><script src="https://cdn.jsdelivr.net/npm/jquery@1.12.4/dist/jquery.min.js"integrity="sha384-nvAa0+6Qg9clwYCGGPpDQLVpLNn0fRaROjHqs13t4Ggj3Ez50XnGQqc/r8MhnRDZ"crossorigin="anonymous"></script><script>window.jQuery || document.write('<script src="https://cdn.jsdelivr.net/npm/@bootcss/v3.bootcss.com@1.0.14/assets/js/vendor/jquery.min.js"><\/script>')</script><script src="https://cdn.jsdelivr.net/npm/@bootcss/v3.bootcss.com@1.0.14/dist/js/bootstrap.min.js"></script><!-- Just to make our placeholder images work. Don't actually copy the next line! --><script src="https://cdn.jsdelivr.net/npm/@bootcss/v3.bootcss.com@1.0.14/assets/js/vendor/holder.min.js"></script><!-- IE10 viewport hack for Surface/desktop Windows 8 bug --><scriptsrc="https://cdn.jsdelivr.net/npm/@bootcss/v3.bootcss.com@1.0.14/assets/js/ie10-viewport-bug-workaround.js"></script>
</body></html>

views-index:

<!doctype html>
<html lang="zh-CN"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1"><!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags --><meta name="description" content=""><meta name="author" content=""><link rel="icon" href="https://cdn.jsdelivr.net/npm/@bootcss/v3.bootcss.com@1.0.14/favicon.ico"><link rel="canonical" href="https://getbootstrap.com/docs/3.4/examples/dashboard/"><title>NODE CURD</title><!-- Bootstrap core CSS --><link href="https://cdn.jsdelivr.net/npm/@bootcss/v3.bootcss.com@1.0.14/dist/css/bootstrap.min.css"rel="stylesheet"><!-- IE10 viewport hack for Surface/desktop Windows 8 bug --><link href="https://cdn.jsdelivr.net/npm/@bootcss/v3.bootcss.com@1.0.14/assets/css/ie10-viewport-bug-workaround.css"rel="stylesheet"><!-- Custom styles for this template --><link href="https://cdn.jsdelivr.net/npm/@bootcss/v3.bootcss.com@1.0.14/examples/dashboard/dashboard.css"rel="stylesheet"><!-- <link href="/public/css/main.css" rel="stylesheet"> --><!-- Just for debugging purposes. Don't actually copy these 2 lines! --><!--[if lt IE 9]><script src="https://cdn.jsdelivr.net/npm/@bootcss/v3.bootcss.com@1.0.14/assets/js/ie8-responsive-file-warning.js"></script><![endif]--><scriptsrc="https://cdn.jsdelivr.net/npm/@bootcss/v3.bootcss.com@1.0.14/assets/js/ie-emulation-modes-warning.js"></script><!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries --><!--[if lt IE 9]><script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script><script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script><![endif]-->
</head><body><div class="container-fluid"><div class="row"><div class="col-sm-3 col-md-2 sidebar"><ul class="nav nav-sidebar"><li class="active"><a href="#">Overview <span class="sr-only">(current)</span></a></li><li><a href="#">Reports</a></li><li><a href="#">Analytics</a></li><li><a href="#">Export</a></li></ul><ul class="nav nav-sidebar"><li><a href="">Nav item</a></li><li><a href="">Nav item again</a></li><li><a href="">One more nav</a></li><li><a href="">Another nav item</a></li><li><a href="">More navigation</a></li></ul><ul class="nav nav-sidebar"><li><a href="">Nav item again</a></li><li><a href="">One more nav</a></li><li><a href="">Another nav item</a></li></ul></div><div class="col-sm-9 col-sm-offset-3 col-md-10 col-md-offset-2 main"><h1 class="page-header">NODE CURD</h1><div class="row placeholders">{{each fruits}}<div class="col-xs-6 col-sm-3 placeholder"><img src="data:image/gif;base64,R0lGODlhAQABAIAAAHd3dwAAACH5BAAAAAAALAAAAAABAAEAAAICRAEAOw=="width="200" height="200" class="img-responsive" alt="Generic placeholder thumbnail"><h4>{{$value}}</h4><span class="text-muted">Something else</span></div>{{/each}}</div><h2 class="sub-header">Section title</h2><a href="/students/new" class="btn btn-success">添加学生</a><div class="table-responsive"><table class="table table-striped"><thead><tr><th>#</th><th>姓名</th><th>性别</th><th>年龄</th><th>爱好</th><th>操作</th></tr></thead><tbody>{{each students}}<tr><td>{{$value.id}}</td><td>{{$value.name}}</td><td>{{$value.gender}}</td><td>{{$value.age}}</td><td>{{$value.hobbies}}</td><td><a href="/students/edit?id={{$value.id}}">编辑</a><a href="/students/delete?id={{$value.id}}">删除</a></td></tr>{{/each}}</tbody></table></div></div></div></div><!-- Bootstrap core JavaScript================================================== --><!-- Placed at the end of the document so the pages load faster --><script src="https://cdn.jsdelivr.net/npm/jquery@1.12.4/dist/jquery.min.js"integrity="sha384-nvAa0+6Qg9clwYCGGPpDQLVpLNn0fRaROjHqs13t4Ggj3Ez50XnGQqc/r8MhnRDZ"crossorigin="anonymous"></script><script>window.jQuery || document.write('<script src="https://cdn.jsdelivr.net/npm/@bootcss/v3.bootcss.com@1.0.14/assets/js/vendor/jquery.min.js"><\/script>')</script><script src="https://cdn.jsdelivr.net/npm/@bootcss/v3.bootcss.com@1.0.14/dist/js/bootstrap.min.js"></script><!-- Just to make our placeholder images work. Don't actually copy the next line! --><script src="https://cdn.jsdelivr.net/npm/@bootcss/v3.bootcss.com@1.0.14/assets/js/vendor/holder.min.js"></script><!-- IE10 viewport hack for Surface/desktop Windows 8 bug --><scriptsrc="https://cdn.jsdelivr.net/npm/@bootcss/v3.bootcss.com@1.0.14/assets/js/ie10-viewport-bug-workaround.js"></script>
</body></html>

views-new:

<!doctype html>
<html lang="zh-CN"><head><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1"><!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags --><meta name="description" content=""><meta name="author" content=""><link rel="icon" href="https://cdn.jsdelivr.net/npm/@bootcss/v3.bootcss.com@1.0.14/favicon.ico"><link rel="canonical" href="https://getbootstrap.com/docs/3.4/examples/dashboard/"><title>NODE CURD</title><!-- Bootstrap core CSS --><link href="https://cdn.jsdelivr.net/npm/@bootcss/v3.bootcss.com@1.0.14/dist/css/bootstrap.min.css"rel="stylesheet"><!-- IE10 viewport hack for Surface/desktop Windows 8 bug --><link href="https://cdn.jsdelivr.net/npm/@bootcss/v3.bootcss.com@1.0.14/assets/css/ie10-viewport-bug-workaround.css"rel="stylesheet"><!-- Custom styles for this template --><link href="https://cdn.jsdelivr.net/npm/@bootcss/v3.bootcss.com@1.0.14/examples/dashboard/dashboard.css"rel="stylesheet"><!-- <link href="/public/css/main.css" rel="stylesheet"> --><!-- Just for debugging purposes. Don't actually copy these 2 lines! --><!--[if lt IE 9]><script src="https://cdn.jsdelivr.net/npm/@bootcss/v3.bootcss.com@1.0.14/assets/js/ie8-responsive-file-warning.js"></script><![endif]--><scriptsrc="https://cdn.jsdelivr.net/npm/@bootcss/v3.bootcss.com@1.0.14/assets/js/ie-emulation-modes-warning.js"></script><!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries --><!--[if lt IE 9]><script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script><script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script><![endif]-->
</head><body><div class="container-fluid"><div class="row"><div class="col-sm-3 col-md-2 sidebar"><ul class="nav nav-sidebar"><li class="active"><a href="#">Overview <span class="sr-only">(current)</span></a></li><li><a href="#">Reports</a></li><li><a href="#">Analytics</a></li><li><a href="#">Export</a></li></ul><ul class="nav nav-sidebar"><li><a href="">Nav item</a></li><li><a href="">Nav item again</a></li><li><a href="">One more nav</a></li><li><a href="">Another nav item</a></li><li><a href="">More navigation</a></li></ul><ul class="nav nav-sidebar"><li><a href="">Nav item again</a></li><li><a href="">One more nav</a></li><li><a href="">Another nav item</a></li></ul></div><div class="col-sm-9 col-sm-offset-3 col-md-10 col-md-offset-2 main"><h1 class="page-header">NODE CURD</h1><h2 class="sub-header">添加学生</h2><form action="/students/new" method="POST"><div class="form-group"><label for="exampleInputEmail1">姓名</label><input type="text" class="form-control" id="" placeholder="name" name="name"></div><div class="form-group"><label for="gender">性别</label><label class="radio-inline"><input type="radio" name="gender" id="" value="0"> 男</label><label class="radio-inline"><input type="radio" name="gender" id="" value="1"> 女</label></div><div class="form-group"><label for="exampleInputFile">年龄</label><input type="number" class="form-control" id="" name="age"></div><div class="form-group"><label for="gender">爱好<input type="text" class="form-control"></label></div><button type="submit" class="btn btn-default">Submit</button></form></div></div></div><!-- Bootstrap core JavaScript================================================== --><!-- Placed at the end of the document so the pages load faster --><script src="https://cdn.jsdelivr.net/npm/jquery@1.12.4/dist/jquery.min.js"integrity="sha384-nvAa0+6Qg9clwYCGGPpDQLVpLNn0fRaROjHqs13t4Ggj3Ez50XnGQqc/r8MhnRDZ"crossorigin="anonymous"></script><script>window.jQuery || document.write('<script src="https://cdn.jsdelivr.net/npm/@bootcss/v3.bootcss.com@1.0.14/assets/js/vendor/jquery.min.js"><\/script>')</script><script src="https://cdn.jsdelivr.net/npm/@bootcss/v3.bootcss.com@1.0.14/dist/js/bootstrap.min.js"></script><!-- Just to make our placeholder images work. Don't actually copy the next line! --><script src="https://cdn.jsdelivr.net/npm/@bootcss/v3.bootcss.com@1.0.14/assets/js/vendor/holder.min.js"></script><!-- IE10 viewport hack for Surface/desktop Windows 8 bug --><scriptsrc="https://cdn.jsdelivr.net/npm/@bootcss/v3.bootcss.com@1.0.14/assets/js/ie10-viewport-bug-workaround.js"></script>
</body></html>

app.js:

var express = require('express')
var router = require('./router')
var bodyParser = require('body-parser')var app = express()app.use('/node_modules/', express.static('./node_modules/'))
app.use('/piblic/', express.static('./piblic/'))app.engine('html', require('express-art-template'));// 配置模板引擎和 body-parser一定要在app.ues(router)挂载路由之前
// parse application/x-www-form-urlencoded
app.use(bodyParser.urlencoded({ extended: false }))
// parse application/json
app.use(bodyParser.json())// 把路由容器挂载到app服务中
app.use(router)app.listen(3000, function () {console.log('running 3000....')
})module.exports = app

router.js:

var fs = require('fs')
var Student = require('./student')// Student.updateById({//     id:1,
//     name:'zha'// },function (err) {
//     if(err){//         return console.log('修改失败')
//     }
//     console.log('修改成功')
//  })
// module.exports = function (app) {//     app.get('/students', function (req, res) {//         // readFile的第二个可选参数是可选的,utf8就是告诉他读取到的文件直接按照utf8编码来转换成我们理解的语言
//         fs.readFile('./db.json', 'utf8', function (err, data) {//             if (err) {//                 return res.status(500).send('Server error.')
//             }
//             var students = JSON.parse(data).students
//             var fruits = JSON.parse(data).fruits
//             res.render('index.html', {//                 //    从文件中读取到的数据一定是字符串,所以这里一定要手动转换成对象
//                 fruits: fruits,
//                 students: students
//             })
//         })
//     })
//     app.get('/students', function (req, res) {//     })
//     app.get('/students/new', function (req, res) {//     })
//     app.post('/students/new', function (req, res) {//     })
//     app.get('/students,edit', function (req, res) {//     })
//     app.post('/students/edit', function (req, res) {//     })
//     app.get('/students/delete', function (req, res) {//     })
// }// 上面这种方法不方便
// 所以 express提供了一种更做我们好的方式
// 专门用来包装路由的
var express = require('express')
// 1.创建一个路由容器
var router = express.Router()
// 2.把路由都挂载到router中
router.get('/students', function (req, res) {// readFile的第二个可选参数是可选的,utf8就是告诉他读取到的文件直接按照utf8编码来转换成我们理解的语言// fs.readFile('./db.json', 'utf8', function (err, data) {//     if (err) {//         return res.status(500).send('Server error.')//     }//     var students = JSON.parse(data).students//     var fruits = JSON.parse(data).fruits//     res.render('index.html', {//         //    从文件中读取到的数据一定是字符串,所以这里一定要手动转换成对象//         fruits: fruits,//         students: students//     })// })Student.find(function (err, students) {if (err) {return res.status(500).send('Server error.')}res.render('index.html', {//    从文件中读取到的数据一定是字符串,所以这里一定要手动转换成对象// fruits: fruits,students: students})})
})router.get('/students/new', function (req, res) {res.render('new.html')
})router.post('/students/new', function (req, res) {// 1.获取表单数据console.log(req.body)// 2.处理// 将数据保存到db.json文件中用以持久化// 3.发送响应// 先读取出来,再转成对象。然后往对象中push数。再把字符串转成对象。Student.save(req.body, function (err) {if (err) {return res.status(500).send('Server error.')}res.redirect('/students')})})router.get('/students/edit', function (req, res) {// 1.在客户端的列表页中处理链接问题,需要有id参数// 2.获取要编辑的学生的id// 3.渲染编辑页面//      根据id把学生的信息查出来,再使用模板引擎渲染页面Student.findById(parseInt(req.query.id), function (err, student) {if (err) {return res.status(500).send('Server error.')}res.render('edit.html', {student: student})})})router.post('/students/edit', function (req, res) {// 1.获取表单数据req.body// 2.保存更新student.update()// 3.发送响应Student.updateById(req.body, function (err) {if (err) {return res.status(500).send('Server error.')}res.redirect('/students')})})router.get('/students/delete', function (req, res) {// 1.获取要删除的id// 2.根据id执行删除操作// 3.根据操作结果发送响应数据Student.deleteById(req.query.id, function (err) {if (err) {return res.status(500).send('Server error.')}res.redirect('/students')})
})
// 3.把router导出
module.exports = router

student.js:

/** * 数据操作文件模块* 职责:* 操作文件中的数据,只处理数据,不关心业务* */var fs = require('fs')var dbPath = './db.json'
// 获取所有学生列表
/*** callback 中的参数* 第一个参数是err*      成功是null 错误是错误对象* 第二个参数是结果*      成功是数组 错误是undefined*/
exports.find = function (callback) {fs.readFile(dbPath, 'utf8', function (err, data) {if (err) {return callback(err)}callback(null, JSON.parse(data).students)})
}
/*** 根据id获取学生信息对象* @param {Number} id       学生id* @param {*} callback */
exports.findById = function (id, callback) {fs.readFile(dbPath, 'utf8', function (err, data) {if (err) {return callback(err)}var students = JSON.parse(data).studentsvar ret = students.find(function (item) {return item.id === parseInt(id)})callback(null, ret)})
}// 添加保存学生
exports.save = function (student, callback) {fs.readFile(dbPath, 'utf8', function (err, data) {if (err) {return callback(err)}var students = JSON.parse(data).students// 处理id唯一的,不重复student.id = students[students.length - 1].id + 1// 把用户传递的对象保存到数组中students.push(student)// 把对象数据转换成字符串var fileData = JSON.stringify({students: students})// 把字符串保存到文件中fs.writeFile(dbPath, fileData, function (err) {if (err) { return callback(err) }callback(null)})})
}// 更新学生
exports.updateById = function (student, callback) {fs.readFile(dbPath, 'utf8', function (err, data) {if (err) {return callback(err)}var students = JSON.parse(data).students// 注意:这里要把id统一成数字类型student.id = parseInt(student.id)// 要修改谁,就要把他找出来// ES6中的一个数组方法:find// 当某个遍历项符合 item.id === student.id 条件的时候,find会终止遍历,同时会返回遍历项var stu = students.find(function (item) {return item.id === parseInt(student.id)})//  for (var key in student) {stu[key] = student[key]}// 把对象数据转换成字符串var fileData = JSON.stringify({students: students})// 把字符串保存到文件中fs.writeFile(dbPath, fileData, function (err) {if (err) { return callback(err) }callback(null)})})
}// 删除学生
exports.deleteById = function (id, callback) {fs.readFile(dbPath, 'utf8', function (err, data) {if (err) {return callback(err)}var students = JSON.parse(data).students// findIndex 用来根据条件查找元素的下标var deleteId = students.findIndex(function (item) {return item.id === parseInt(id)})console.log(deleteId)students.splice(deleteId, 1)var fileData = JSON.stringify({students: students})fs.writeFile(dbPath, fileData, function (err) {if (err) {return callback(err)}callback(null)})})
}

db.json:

{"students":[{"id":0,"name":"wrwe","gender":1,"age":23,"hobbies":"asdkjha"},{"id":0,"name":"wrwe","gender":1,"age":23,"hobbies":"asdkjha"},{"id":0,"name":"wrwe","gender":1,"age":23,"hobbies":"asdkjha"},{"id":0,"name":"wrwe","gender":1,"age":23,"hobbies":"asdkjha"},{"id":0,"name":"wrwe","gender":1,"age":23,"hobbies":"asdkjha"},{"name":"绕弯儿","gender":"1","age":"43","id":1}]}

Nodejs学习五(CRUD)相关推荐

  1. nodejs学习五:sequelize数据库查询的Op方法

    // 查找users表数据nameconst op = models.Sequelize.Op;let {age} = req.query;let user = await models.User.f ...

  2. 好程序员web前端分享Nodejs学习笔记之Stream模块

    好程序员web前端分享Nodejs学习笔记之Stream模块 一,开篇分析 流是一个抽象接口,被 Node 中的很多对象所实现.比如对一个 HTTP 服务器的请求是一个流,stdout 也是一个流.流 ...

  3. Nodejs学习笔记(七)——接口API

    [目录] Nodejs学习笔记(一)--基础之全局对象.包和npm Nodejs学习笔记(二)--模块 Nodejs学习笔记(三)--同步和与异步之文件系统模块 Nodejs学习笔记(四)--http ...

  4. Nodejs学习笔记(六)——Mysql模块

    [目录] Nodejs学习笔记(一)--基础之全局对象.包和npm Nodejs学习笔记(二)--模块 Nodejs学习笔记(三)--同步和与异步之文件系统模块 Nodejs学习笔记(四)--http ...

  5. Nodejs学习笔记(四)——http协议与服务器

    [目录] Nodejs学习笔记(一)--基础之全局对象.包和npm Nodejs学习笔记(二)--模块 Nodejs学习笔记(三)--同步和与异步之文件系统模块 Nodejs学习笔记(五)--expr ...

  6. Nodejs学习笔记(二)——模块

    [目录] Nodejs学习笔记(一)--基础之全局对象.包和npm Nodejs学习笔记(三)--同步和与异步之文件系统模块 Nodejs学习笔记(四)--http协议与服务器 Nodejs学习笔记( ...

  7. Nodejs学习笔记(一)——基础之全局对象、包和npm

    [目录] Nodejs学习笔记(二)--模块 Nodejs学习笔记(三)--同步和与异步之文件系统模块 Nodejs学习笔记(四)--http协议与服务器 Nodejs学习笔记(五)--express ...

  8. NodeJS学习笔记: RESTful —— 为本系列做个小结

    前言 本人不是技术专家,该笔记只是从使用语言进行开发的层面上记录一些体会,不包含也不想尝试从源码或者更深的层次去讨论语言本身的优劣.文章内容是笔者的个人感悟,既不保证正确性,也不保证别人能看懂. 这是 ...

  9. vivado 亚稳态_【vivado学习五】时序分析

    想一千次,不如去做一次.华丽的跌倒,胜过无谓的徘徊. [vivado学习五]时序分析 典型的时序模型由发起寄存器.组合逻辑和捕获寄存器3部分组成,如图1所示形成了三条时钟路径:原时钟路径(Source ...

最新文章

  1. Code First 指定外键名称
  2. 学习笔记(八)——jQuery(二)
  3. 数据结构解析——小白也能看懂的单链表
  4. Modelsim se仿真Xilinx IPcore
  5. 8个JavaScript库可更好地处理本地存储
  6. 【洛谷P3389】【模板】高斯消元
  7. 计算机网络ieee,博士生程珂论文连续两年被计算机网络顶级会议IEEE INFOCOM录用...
  8. HEVC/H265 namespace 介绍
  9. 官方文档太辣鸡?TensorFlow 2.0开源工具书,30天「无痛」上手
  10. Android——RelativeLayout(相对布局)
  11. 远程执行命令不成功的问题
  12. CentOS mysql常用命令
  13. 电脑主机组装总结——自己动手,丰衣足食
  14. 无惧断电 小苏云“同城三机房”容灾演练成功
  15. 这些华为技巧,花粉都不一定全知道
  16. 微软远程桌面0x104_如何处理WIN10上的远程桌面错误0x104教程
  17. c++二分法求平方根
  18. 吃透一切整流滤波电路
  19. Win7 64位下Kindle4、闪迪Cruzer BladeU盘等无法安装驱动问题的解决方法
  20. 凡人修真3D(2)神兵

热门文章

  1. python SHA1算法的实现
  2. python学习之代码练习二(鸽子和兔子)
  3. 一场特殊发布会与小米的「重新创业」
  4. docker load -i 导入后 看不到镜像
  5. DirectX学习记录
  6. DotNetty z
  7. Linux下查看日志用到的常用命令
  8. 蓝桥杯素数等差数列问题
  9. Java数组三种输出方式
  10. 建筑施工中,从购地到交付的流程你知道吗