student.js

var express = require('express');
var router = express.Router();
const _=require("lodash");
const { MongoClient } = require("mongodb"); //依赖MongoClient
var client=new MongoClient("mongodb://127.0.0.1:27017"); //实例化一个客户端
var clientAdd=new MongoClient("mongodb://127.0.0.1:27017"); //实例化一个客户端
var clientdel=new MongoClient("mongodb://127.0.0.1:27017"); //实例化一个客户端
var books=[]; //查询全部
async function run(){
try{
let db=await client.db("BookMessge"); //获取数据库
let students=await db.collection("books"); //获取集合
let cursor=await students.find(); //执行查询并返回游标对象 await cursor.forEach(data=>books.push(data)); //遍历游标,取出数据
}
finally{
await client.close(); //关闭
}
}; //添加
async function add(booklist){
try{
let db=await clientAdd.db("BookMessge"); //获取数据库
let students=await db.collection("books"); //获取集合,表
let result=await students.insertOne(booklist); //执行向数据库中添加数据并等待响应结果
console.log(result);
}
finally{
await clientAdd.close(); //关闭数据库
}
} //删除
async function del(id){
try{
let db=await clientdel.db("BookMessge"); //获取数据库
let students=await db.collection("books"); //获取集合,表
let result= await students.deleteOne(id); //执行删除
console.log(result);
}
finally{
await clientdel.close(); //关闭
}
} run().catch(console.log); /* GET home page. */
router.get('/', function(req, res, next) {
res.render('student', {books,msg: '',stu:{id:"",name:"",age:""}});
}); router.get('/delete/:id', function(req, res, next) {
//查找选中id的索引
let id=req.params.id;
console.log(id);
let ids={id:""};
ids.id=id;
console.log(ids);
del(ids).catch(console.log);
res.render('student', {books,msg: '删除成功!',stu:{id:"",name:"",age:""}});
}); //添加
router.post('/add', function(req, res, next) {
//查找选中id的索引
let book=req.body;
//根据编号排序
let new_id=_.orderBy(books,parseInt(["id"]));
book.id=_.last(new_id).id+1;
//拿到序号
let newbooks_id=_.orderBy(books,parseInt(["books_id"]));
book.books_id=_.last(newbooks_id).books_id+1;
console.log(book);
add(book).catch(console.log);
res.render('student', {books,msg: '添加成功'});
}); //修改
router.get('/edit/:id', function(req, res, next) {
//查找选中id的索引
let stu=_.find(stus,{id:parseInt(req.params.id)})
console.log(stus);
res.render('student', {stus,msg: '',stu});
}); //更新
router.post('/update', function(req, res, next) {
//查找选中id的索引
let stuSubmit=req.body;
let stu=_.find(stus,{id:parseInt(stuSubmit.id)})
stu.name=stuSubmit.name;
stu.age=stuSubmit.age;
//重新渲染页面
res.render('student', {stus,msg: '更新成功',stu:{id:"",name:"",age:""}});
}); module.exports = router;

student.ejs

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>图书管理系统</title>
</head>
<body>
<h1>图书管理系统</h1>
<table width="100%" border="1">
<tr>
<th>序号</th>
<th>编号</th>
<th>书名</th>
<th>封面</th>
<th>价格</th>
<th>作者</th>
<th>操作</th>
</tr>
<% for(let i=0;i<books.length;i++){ %>
<tr style="text-align: center;">
<td><%=books[i].id%></td>
<td><%=books[i].books_id%></td>
<td><%=books[i].name%></td>
<td><%=books[i].img%></td>
<td><%=books[i].price%></td>
<td><%=books[i].author%></td>
<td>
<a href="/delete/<%=books[i].id%>" class="del">删除</a>
<a href="/edit/<%=books[i].id%>">修改</a>
</td>
</tr>
<%} %>
</table>
<fieldset>
<legend>添加学生</legend>
<form method="post">
<input type="hidden" name="id" id="id" value="<%=books.id%>">
<input type="hidden" name="books_id" id="books_id" value="<%=books.books_id%>">
<p>
<label>图书名称:</label>
<input type="text" name="name" value="<%=books.name%>">
</p>
<p>
<label>图书封面:</label>
<input type="file" name="img" value="<%=books.img%>">
</p>
<p>
<label>图书价格:</label>
<input type="text" name="price" value="<%=books.price%>">
</p>
<p>
<label>图书作者:</label>
<input type="text" name="author" value="<%=books.author%>">
</p>
<button formaction="/add">添加</button>
<button formaction="/update">更新</button>
</form>
</fieldset> <h4><%=msg%></h4> <script>
let dels=document.querySelectorAll(".del");
for(let i=0;i<dels.length;i++){
dels[i].onclick=function(){
return confirm("您确定要删除吗?");
}
}
</script>
</body>
</html>

app.js

var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan'); var indexRouter = require('./routes/index');
var usersRouter = require('./routes/users');
var studentRouter = require('./routes/student'); var app = express(); // view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs'); app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public'))); app.use('/index', indexRouter);
app.use('/users', usersRouter);
app.use('/', studentRouter); // catch 404 and forward to error handler
app.use(function(req, res, next) {
next(createError(404));
}); // error handler
app.use(function(err, req, res, next) {
// set locals, only providing error in development
res.locals.message = err.message;
res.locals.error = req.app.get('env') === 'development' ? err : {}; // render the error page
res.status(err.status || 500);
res.render('error');
}); module.exports = app;

Node.js(六)MongoDB的更多相关文章

  1. 以太坊开发DApp实战教程——用区块链、星际文件系统(IPFS)、Node.js和MongoDB来构建电商平台(一)

    第一节 简介 欢迎和我们一起来用以太坊开发构建一个去中心化电商DApp!我们将用区块链.星际文件系统(IPFS).Node.js和MongoDB来构建电商平台类似淘宝的在线电商应用,卖家可以自由地出售 ...

  2. Node.js 中MongoDB的基本接口操作

    Node.js 中MongoDB的基本接口操作 连接数据库 安装mongodb模块 导入mongodb模块 调用connect方法 文档的增删改查操作 插入文档 方法: db.collection(& ...

  3. MongoDB学习(2)—Node.js与MongoDB的基本连接示例

    前提 已经安装了node.js和MongoDB,本文使用的node.js是v0.12.0,MongoDB是3.0.0. 初始化数据 启动MongoDB服务,在test数据库中插入一条实例数据: db. ...

  4. 使用React、Node.js、MongoDB、Socket.IO开发一个角色投票应用的学习过程(三)

    这几篇都是我原来首发在 segmentfault 上的地址:https://segmentfault.com/a/1190000005040834 突然想起来我这个博客冷落了好多年了,也该更新一下,呵 ...

  5. Node.js和MongoDB - MongoJS入门

    第一次尝试翻译外国牛人的博文,希望大家喜欢. 本文源码详见:https://github.com/njaulj/mongojs 一点都不夸大的说,近年来node.js和mongodb的确是大放异彩,在 ...

  6. Node.js与MongoDB的基本连接示例

    Node.js与MongoDB的基本连接示例 前提 已经安装了node.js和MongoDB,本文使用的node.js是v0.12.0,MongoDB是3.0.0. 初始化数据 启动MongoDB服务 ...

  7. [Node.js]连接mongodb

    摘要 前面介绍了node.js操作mysql以及redis的内容,这里继续学习操作mongodb的内容. 安装驱动 安装命令 cnpm install mongodb 安装成功 数据库操作 因为mon ...

  8. node.js+express+mongodb

    主要是想用node.js链接mongodb,用的是mongoose.用ejs引擎,扩展到.html比较容易 小例子结构简单,框架清晰. 提交方法 路径 方法 作用 get add     post a ...

  9. Node.js+websocket+mongodb实现即时聊天室

    ChatRoom Node.js+websocket+mongodb实现即时聊天室 A,nodejs简介:Node.js是一个可以让javascript运行在服务器端的平台,它可以让javascrip ...

  10. node.js和MongoDB学习网址

    回想我写的node.js和MongoDB的博客,都是菜鸟教程那里的知识,所以我打算不写了,那些都是基础,在项目开发中,我发现单单有那些基础不行,这些基础可以尽快学好,然后学习项目开发过程 下面是两个教 ...

随机推荐

  1. ROS机械臂 Movelt 学习笔记2 | Move Group 接口 C++

    Movelt为使用者提供了一个最通用且简单的接口 MoveGroupInterface 类,这个接口提供了很多控制机器人的常用基本操作,如: 设置机械臂的位姿 进行运动规划 移动机器人本体 将物品添加 ...

  2. nginx的高级用法

    一.根据url中的参数来确定缓存的key set_by_lua_block $dataArg { local enc = ngx.req.get_uri_args()["enc"] ...

  3. Linux学习系列--如何在Linux中进行文件的管理

    文件 在常见的Linux的文件系统中,经常使用能了解到的文件管理系统是分为多个文件夹进行管理的. 如何查看文件路径 pwd ,在文件目录中,会有一个点(.)代表的是当前目录,两个点(..)代表的是当前 ...

  4. PHP几个数组函数

    array_intersect比较两个数组的键值,并返回交集: <?php $a1=array("a"=>"red","b"=& ...

  5. [spring]spring详细总结

    spring 1.spring简介 Spring框架是一个开源的应用程序框架,是针对bean的生命周期进行管理的轻量级容器. Spring解决了开发者在J2EE开发中遇到的许多常见的问题,提供了功能强 ...

  6. 基于ABP和Magicodes实现Excel导出操作

      前端使用的vue-element-admin框架,后端使用ABP框架,Excel导出使用的Magicodes.IE.Excel.Abp库.Excel导入和导出操作几乎一样,不再介绍.文本主要介绍E ...

  7. C#实现访问OPC UA服务器

    OPC UA服务器支持三种认证方式,分别是匿名认证.用户认证和证书认证.其中匿名认证安全等级最低,访问不做任何校验.用户认证访问时,OPC UA客户端需要提供用户名及密码认证,只有用户名和密码正确才允 ...

  8. 开源风吹动开源心 ~ 8月16日,你若来,我们(Apache)在等你!

    点击上方蓝字关注ALC Beijing 抢! 太好看了吧! 买它,就是它,买它! 要抢! ALC是Apache Local Community的缩写,是全世界范围的 Apache 开源爱好者本地群组. ...

  9. Luogu4084 [USACO17DEC]Barn Painting (树形DP)

    数组越界那个RE+WA的姹紫嫣红的... 乘法原理求种类数,类似于没有上司的舞会. #include <iostream> #include <cstdio> #include ...

  10. 造数字(数位DP)

    题面 JZM 想要创造两个数字 x 和 y,它们需要满足 x or y = T,且Lx ≤ x ≤ Rx, Ly ≤ y ≤ Ry,JZM 想知道 x and y 有多少种可能的不同的取值.若有多组 ...