node+mongodb+mongoose实现新闻系统

2019-9-20 本周学习知识总结

这周主要学习node.js中express框架,以及mongodb非关系型数据库,最后主要学习了node模块mongoose用来操作mongodb数据库。

第一部分 mongodb 数据库的学习

1.mongodb的下载
访问mongodb官网下载mongodb。
可以同时下载mongonvue,作为一个mongodb的可视化界面,可以让我们不用在dos命令框中操作数据库。
2.mongodb数据库的配置
1)为了可以在全局使用mongodb,所以要设置环境变量,找到mongodb的安装位置,添加到环境变量。
   eg: 我的mongodb安装位置为:D:\mongoDB\mongoDB\mongodb-win32-x86_64-2008plus-ssl-4.0.11\bin

只需要找到环境变量将该地址添加到环境变量path中,这样mongo命令就可以全局执行。

2)创建文件夹 mongodb,(创建在非系统盘,本人在d盘中)创建两个子文件夹 db 和 log,用来保存新的数据库,和缓存数据。
3)以管理员身份运行cmd,注意去c盘system32中找到cmd。右键单击点击以管理员身份运行。将mongodb挂在为windows服务。

执行以下命令:


我创建的mongodb文件夹在d盘下,所以db子文件夹在d:mongodb\db
log子文件夹:d:mongodb\log\MonDB.log(mongodb.log会自动创建,不用我们手动创建)

所以我执行的命令为:->mongo -- dbpath "d:mongodb\db" --logpath "d:mongodb\log\MonDB.log" --install --serviceName "MongoDB"

命令你数据库存放的位置和日志存放的位置,这个不会的建议百度。

4)这时候基本安装完毕,不会的同学可以百度也可以评论。现在去cmd下执行 mongo
出现:

MongoDB shell version v4.2.0
connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { “id” : UUID(“96e58f01-3679-49ca-b466-ca5f7bf03d8c”) }
MongoDB server version: 4.2.0
则说明安装成功。

4.mongodb数据库的一些基本命令

1.启动和关闭mongodb数据库(在管理员模式下运行cmd)

启动:  net start mongodb
关闭: net stop mongodb

2.进入数据库

在命令行中运行:mongo 进入数据库管理模式
在数据库管理模式中,只能执行数据库命令,不能执行其他命令
exit   推出数据库管理模式

3.数据库的基本操作:
首先了解数据库组成: 数据库名称 下会有数据库集合, 集合下为数据:
这里假设数据库为:news
news下有集合:list
list有数据

首先我们可以查看所有的数据库:
命令:show dbs
进入一个数据库:
命令:use + 数据库名 eg:use news(如果该集合存在那么回进入集合,如果不存在,那么就会新建这个集合);
查看该数据库下的集合:
命令:show collections
查看当前的数据库名字:
命令:db

创建集合:db.集合名.insert (可以在我们添加数据是直接自动生成新的集合)
删除集合:db.集合名.drop
注意:重中之重: 现有数据库,才会有集合,才会有文档(大家疑问:创建了数据库,show dbs 缺没有我创建的数据库,这是因为数据库中没有内内容,所以接下来我们说数据库的增删改查)
数据库的增删改查:
a.新增数据(还有save方式大家可以去了解下(不常用))

db.集合名.insert({json形式})
eg: db.list.insert({name:"tomcat"});
出现:  WriteResult({ "nInserted" : 1 })  则表明插入成功

b.查看数据

db.集合名.find();
eg:db.list.find();   // 没有格式的数据
  db.list.find().pretty();  //格式比较好的数据

c.数据修改

db.集合名.update({});  //前面是通过条件查找到数据
eg:db.list.update(name:"tomcat",name:"jerry"); //  查找name为tomcat的数据,修改为jerry
只修改一条数据:
eg:db.list.update(name:"tomcat",{$set{name:"jerry"}});

d.数据的删除

db.集合名.remove({});
eg:db.list.remove({})   全部删除   可以通过id值删除一条数据

       mongodb还有好多高级命令大家去百度查找然后学习吧

mongoose操作mongodb数据库(重点)
1.什么是mongoose?

mongoose是node.js的一个第三方模块,是node.js一部环境下对mongodb进行便捷操作的对象模型工具。
可以对mongodb进行数据的增删改查等方法。

2.mongoose的安装和使用
cnpm install mongoose   //需要安装cnpm   cnpm是淘宝镜像npm,快速,便捷
3.express创建一个小的项目
express -e app   (添加路由,创建项目等我想大家柠檬找到这应该都掌握了就不多阐述了,直接进入正题)

1.连接数据库:

语法:   mongoose.connect("momgodb://服务器:端口号/数据库名",回调函数);
eg:
mongoose.connect("mongodb://127.0.0.1/news",{useNewUrlParser:true,useUnifiedTopology:true},function(err,data){
if(err){
throw err}else{
console.log("数据库连接成功")}});      地址为本机地址。后面为你要链接的数据库名

2.数据库骨架的定义:
定义骨架Scheme:
概念:scheme 是一种以文件形式存储的数据库模型骨架,不具备数据库的操作能力

       语法:   new mongoose.Schema({
                    	字段名:类型,
                            字段名:类型
                    })
eg:定义了数据库中数据的类型,便于后期添加和修改数据
var listSchema = new mongoose.Schema({
  title:String,
  author:String,
  laiyuan:String,
  content:String,
  time:String,
  hits:Number
});

3.创建模型

创建模型model(用来读取数据):
     根据骨架来创建模型:
        概述: 具备数据库操作的能力,通常用来读取数据库
       
        var boyModel = mongoose.model("模型名称","骨架","集合名称");

      // 注意 : 模型名称一般和 集合名称相同

eg:
var newsModel = new mongoose.model("list",listSchema,"list");

4.创建实体

依赖于模型创建实体(增删查改的操作要依赖于实体):
     Entity是一种根据模型创建出一个实例,具备数据库操作的能力,通常用于写数据
     (新增,修改,删除)。
     
     var boy = new boyModel();
//boy.属性名 = 值:
singer.save();   //将添加到实体的属性保存到数据库中
singer.remove(); // 删除数据

之后是我根据mongodb + mongoose + express 制作的一个小的新闻系统,基本实现了数据库的增删查改以及express模块中路由的使用的而熟悉。

这是我的需求文档:

需求:制作一个基于后端模板的新闻发布系统
功能:
    1.允许用户发布新闻
    2.允许用户查看新闻(可以在首页浏览到最新的新闻)
    3.允许用户操作删除新闻
    4.允许用户操作修改新闻


1.设计好数据库,和数据的存储结构
    数据库名: news
    集合: list
    文档结构(骨架):
        标题(title):string
        作者(author):string
        来源(from):string
        内容(content):string
        时间(time):string
        点击率(hits):number

第一部分  环境搭建
    1.搭建express项目
       1)创建项目   express - e + 项目名称
       2)安装依赖   cnpm install 
       3)监听端口   app.listen(2019)
       4)运行项目
       5)测试项目   手动打开浏览器   输入网址: localhost
    
    2.配置mongoose
       1)连接数据库
            mongoose.connect("mongodb://127.0.0.1/news",{},function(err){
                if(err){
                    throw err;
                }else{
                    console.log("数据库连接成功");
                }
            })
       2)定义骨架
            var listSchema = new mongoose.Schema({
                title:String,
                author:String,
                from:String,
                content:String,
                time:String,
                hits:Number
            })
       3)创建模型
           var listModel = mongoose.model("list",listSchema,"list");

       第一部分   ok



第二部分  实现功能
    功能实现
    1.允许用户发布新闻
        1)制作一个添加新闻的静态页面
             从resource 目录中将newsadd.html 复制到public静态目录下
             修改静态代码,修改from扁担指向/save_add.html,定义所有输入框的名称
        (save_add.html) 要作为一个动态页面来接收数据
        
        2)制作一个save_add.html 动态页面,保存到数据库中,提示用户结果
             a.根目录下的请求找index.js模块中挂载新路由save_add.html(post方式)

        3)将数据添加到数据库
             var list = new listModel();
             list.属性名 = value;
             list.save(function(){});

             over!  撒花庆祝  哈哈哈

    2. 
    2.允许用户查看新闻(可以在首页浏览到最新的新闻)
        1)先制作一个新闻列表的后端模板
            从resource目录中复制newslist.html 到views/newslist.ejs
            将原有的测试数据删除
            添加for循环模板语法


    3.
    3.允许用户操作删除新闻

    1)找到删除链接的位置,添加a标签连接,指向删除功能的路由
             (newslist.ejs)的模板哩
             添加a标签连接,加链接指向删除功能的路由  /del.html ? id = 

    2)编写路由实现功能
       在router上挂载一个删除新闻的路由 /del.html
       接收id值,作为被删除的数据标识
       根据id查找到数据实体
       data.remove()调用方法实现删除数据
       删除完成以后跳转到列表页面


    4.允许用户操作修改新闻
       第一部分:
            1) 显示出老的数据,提供给用户修改
                1.给列表后面的修改添加链接,指向到新的地址
                    传递id值作为数据的唯一标识
                2.制作显示老数据的模板
                    根据 add.html 制作一个显示老数据的模板
                3.编写路由实现/edit.html动态页面
                    获取id传值
                    根据id读取数据
                    使用ejs模板引擎,将数据和模板进行渲染,得到最终结果返回给客户端
            2) 保存修改后的数据
                1.创建/save_add.html,用于修改数据
                   
                
                打开index.js模块,在router上以post方式挂载/save_edit.html

                2.接收客户端传值
                   注意:必须传递id值才能知道要被修改的数据是谁。在客户端必须添加一个
                         隐藏域用于传递id值。
                   传递id   <input type="hidden" name="id" value="<%=news._id%>">  

                3.查找要被修改的数据
                    listModel.findById(id)

                4. 修改数据
                    data.title = title
                    ......
                    data.save()  保存数据到数据库
                    redirect(可以实现直接跳转)
                

我的新闻系统的效果图:
在这里插入图片描述在这里插入图片描述

上面是上传页和新闻列表页,其中包括数据修改,数据新增和数据添加。
这是代码页文件配置如下:
在这里插入图片描述
因为我比较菜,没有注册自己的git,所以有需要一起探讨的小朋友可以评论我,我们一起学习和进步。

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值