Node.js(六)MongoDB
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的更多相关文章
- 以太坊开发DApp实战教程——用区块链、星际文件系统(IPFS)、Node.js和MongoDB来构建电商平台(一)
第一节 简介 欢迎和我们一起来用以太坊开发构建一个去中心化电商DApp!我们将用区块链.星际文件系统(IPFS).Node.js和MongoDB来构建电商平台类似淘宝的在线电商应用,卖家可以自由地出售 ...
- Node.js 中MongoDB的基本接口操作
Node.js 中MongoDB的基本接口操作 连接数据库 安装mongodb模块 导入mongodb模块 调用connect方法 文档的增删改查操作 插入文档 方法: db.collection(& ...
- MongoDB学习(2)—Node.js与MongoDB的基本连接示例
前提 已经安装了node.js和MongoDB,本文使用的node.js是v0.12.0,MongoDB是3.0.0. 初始化数据 启动MongoDB服务,在test数据库中插入一条实例数据: db. ...
- 使用React、Node.js、MongoDB、Socket.IO开发一个角色投票应用的学习过程(三)
这几篇都是我原来首发在 segmentfault 上的地址:https://segmentfault.com/a/1190000005040834 突然想起来我这个博客冷落了好多年了,也该更新一下,呵 ...
- Node.js和MongoDB - MongoJS入门
第一次尝试翻译外国牛人的博文,希望大家喜欢. 本文源码详见:https://github.com/njaulj/mongojs 一点都不夸大的说,近年来node.js和mongodb的确是大放异彩,在 ...
- Node.js与MongoDB的基本连接示例
Node.js与MongoDB的基本连接示例 前提 已经安装了node.js和MongoDB,本文使用的node.js是v0.12.0,MongoDB是3.0.0. 初始化数据 启动MongoDB服务 ...
- [Node.js]连接mongodb
摘要 前面介绍了node.js操作mysql以及redis的内容,这里继续学习操作mongodb的内容. 安装驱动 安装命令 cnpm install mongodb 安装成功 数据库操作 因为mon ...
- node.js+express+mongodb
主要是想用node.js链接mongodb,用的是mongoose.用ejs引擎,扩展到.html比较容易 小例子结构简单,框架清晰. 提交方法 路径 方法 作用 get add post a ...
- Node.js+websocket+mongodb实现即时聊天室
ChatRoom Node.js+websocket+mongodb实现即时聊天室 A,nodejs简介:Node.js是一个可以让javascript运行在服务器端的平台,它可以让javascrip ...
- node.js和MongoDB学习网址
回想我写的node.js和MongoDB的博客,都是菜鸟教程那里的知识,所以我打算不写了,那些都是基础,在项目开发中,我发现单单有那些基础不行,这些基础可以尽快学好,然后学习项目开发过程 下面是两个教 ...
随机推荐
- SkyWalking分布式系统应用程序性能监控工具-上
概述 微服务系统监控三要素 现在系统基本都是微服务架构,对于复杂微服务链路调用如下问题如何解决? 一个请求经过了这些服务后其中出现了一个调用失败的问题,如何定位问题发生的地方? 如何计算每个节点访问流 ...
- python常用功能模块
路径相关:os.pathlib Windows注册表相关:winreg 系统cpu.内存.线程相关:psutil 文件.文件夹处理:shutil 解析和生成ini文件:ConfigParser:(co ...
- Luogu1088 火星人 (康托展开)
皮一波 #include <iostream> #include <cstdio> #include <cstring> #include <algorith ...
- PySpark 大数据处理
本文主要介绍Spark的一些基本算子,PySpark及Spark SQL 的使用方法. 虽然我从2014年就开始接触Spark,但几年来一直没有真正地学以致用,时间一久便忘了如何使用,直到在工作中用到 ...
- Digester解析xml原理
Tomcat内部是使用Digester来解析xml文件的,将xml转化为java对象. digester底层是基于SAX+事件驱动+栈的方式来搭建实现的,SAX主要用来解析xml,事件驱动主要是在解析 ...
- 第九十一篇:Vue 具名插槽作用域
好家伙, 1.作用域插槽 插槽在定义的时候,可以定义一些属性,便于在父组件中使用 来看看代码: Article.vue组件中: <template> <div class=" ...
- Sentinel 源码分析- 熔断降级原理分析
直接从Sentinel 源码demo ExceptionRatioCircuitBreakerDemo看起 直接看他的main函数 public static void main(String[] a ...
- JDK 自带的服务发现框架 ServiceLoader 好用吗?
请点赞关注,你的支持对我意义重大. Hi,我是小彭.本文已收录到 Github · AndroidFamily 中.这里有 Android 进阶成长知识体系,有志同道合的朋友,关注公众号 [彭旭锐] ...
- 03-MyBatisPlus的CRUD 接口
一.insert 1.插入操作 @RunWith(SpringRunner.class) @SpringBootTest public class CRUDTests { @Autowired pri ...
- kubernetes之基于ServiceAccount拉取私有镜像
前面可以通过ImagPullPolicy和ImageullSecrets指定下载镜像的策略,ServiceAccount也可以基于spec.imagePullSecret字段附带一个由下载镜像专用的S ...