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的博客,都是菜鸟教程那里的知识,所以我打算不写了,那些都是基础,在项目开发中,我发现单单有那些基础不行,这些基础可以尽快学好,然后学习项目开发过程 下面是两个教 ...
随机推荐
- Taurus.MVC V3.0.3 微服务开源框架发布:让.NET 架构在大并发的演进过程更简单。
前方: 开源地址:https://github.com/cyq1162/Taurus.MVC 上篇文章介绍过:工业制造行业的低代码开发平台思维架构图 规划中涉及到了微服务,近些天经过努力和不断的代码与 ...
- Python数据分析--Numpy常用函数介绍(9)-- 与线性代数有关的模块linalg
numpy.linalg 模块包含线性代数的函数.使用这个模块,可以计算逆矩阵.求特征值.解线性方程组以及求解行列式等.一.计算逆矩阵 线性代数中,矩阵A与其逆矩阵A ^(-1)相乘后会得到一个单位矩 ...
- 【AGC】增长服务1-远程配置示例
[AGC]增长服务1-远程配置示例 前言:上一次笔者给大家带来了AGC领域的性能管理服务的学习.这次我们再继续深化学习AGC的相关知识.在文章开始之前,再给读者简单介绍一下AGC,以免第一次来的读 ...
- 【Harmony OS】【ArkUI】ets开发 简易视频播放器
前言:这一次我们来使用ets的Swiper组件.List组件和Video组件制作一个简易的视频播放器.本篇是以HarmonyOS官网的codelab简易视频播放器(eTS)为基础进行编写.本篇最主要 ...
- 面试突击73:IoC 和 DI 有什么区别?
IoC 和 DI 都是 Spring 框架中的重要概念,就像玫瑰花与爱情一样,IoC 和 DI 通常情况下也是成对出现的.那 IoC 和 DI 什么关系和区别呢?接下来,我们一起来看. 1.IoC 介 ...
- Linux 12 安装Docker
参考源 https://www.bilibili.com/video/BV187411y7hF?spm_id_from=333.999.0.0 版本 本文章基于 CentOS 7.6 这里使用 yum ...
- Win32 - 窗口
Win32 - 窗口 目录 Win32 - 窗口 前言 流程图 创建项目 VS MinGW Win32API字符串 Unicode 和 ANSI 函数 TCHAR WinMain:Win32 Appl ...
- TCP实现多个客户端发送数据给服务器端
SocketThread给服务端用的线程类: public class SocketThread extends Thread{ private Socket socket; public Socke ...
- 第三十七篇:JS基础(this)
好家伙, 解析器(浏览器)在调用函数是每次都会响函数内部传递进一个隐含的参数, 这个隐含参数就是this,this指向的是一个对象,由浏览器传过来 这个对象我们成为函数执行的上下文对象 根据函数的调用 ...
- 【长文详解】TypeScript、Babel、webpack以及IDE对TS的类型检查
只要接触过ts的前端同学都能回答出ts是js超集,它具备静态类型分析,能够根据类型在静态代码的解析过程中对ts代码进行类型检查,从而在保证类型的一致性.那,现在让你对你的webpack项目(其实任意类 ...