ExpressJS - 数据库

ExpressJS - 数据库 首页 / ExpressJS入门教程 / ExpressJS - 数据库

无涯教程不断收到请求,但最终没有将它们存储在任何地方,需要一个数据库来存储数据,为此,将使用称为 MongoDB 的NoSQL数据库。

要安装和阅读有关Mongo的信息,请访问此链接。

设置Mongoose

现在您已经安装了Mongo,先安装Mongoose-

npm install --save mongoose

在开始使用Mongoose之前,必须使用Mongo Shell创建数据库,要创建一个新的数据库,请打开您的终端并输入" mongo"。

use my_db

将为您创建一个新的数据库。每当打开mongo shell时,它将默认为"test"数据库,并且您将必须使用与上述相同的命令更改指定数据库。

要使用Mongoose,将在 index.js 文件中加载它,然后连接到在 mongodb://localhost 上运行的 mongodb 服务。

var mongoose=require('mongoose');
mongoose.connect('mongodb://localhost/my_db');

现在应用程序已连接到无涯教程的数据库,创建一个新的模型,该模型将充当数据库中的集合,请在定义任何路由之前使用以下代码-

var personSchema=mongoose.Schema({
   name: String,
   age: Number,
   nationality: String
});
var Person=mongoose.model("Person", personSchema);

Saving Documents

现在,将创建一个新的html表单;该表格将帮助您获取一个人的详细信息并将其保存到数据库中。要创建表单,请在views目录中创建一个名为 person.pug 的新视图文件,其内容如下:

html
head
   title Person
   body
      form(action="/person", method="POST")
      div
         label(for="name") Name: 
         input(name="name")
      br
      div
         label(for="age") Age: 
         input(name="age")
      br
      div
         label(for="nationality") Nationality: 
         input(name="nationality")
      br
      button(type="submit") Create new person

还要在 index.js 中添加新的获取路线来呈现此文档-

app.get('/person', function(req, res){
   res.render('person');
});

转到" localhost:3000/person "检查表单是否显示正确的输出。以下屏幕截图显示了表单的显示方式-

Mongoose Create

现在,无涯教程将在'/person'处定义一个后路由处理程序,它将处理该请求

app.post('/person', function(req, res){
   var personInfo=req.body; //获取解析后的信息
   
   if(!personInfo.name || !personInfo.age || !personInfo.nationality){
      res.render('show_message', {
         message: "Sorry, you provided worng info", type: "error"});
   } else {
      var newPerson=new Person({
         name: personInfo.name,
         age: personInfo.age,
         nationality: personInfo.nationality
      });
		
      newPerson.save(function(err, Person){
         if(err)
            res.render('show_message', {message: "Database error", type: "error"});
         else
            res.render('show_message', {
               message: "New person added", type: "success", person: personInfo});
      });
   }
});

在上面的代码中,如果收到的数据为空,将发送错误响应。如果收到格式正确,则可以从Person模型创建一个 newPerson 文档,并使用 newPerson.save()函数将其保存到数据库中。

要显示此路线的响应,还需要创建一个 show_message 视图。使用以下代码创建新视图-

html
   head
      title Person
   body
      if(type == "error")
         h3(style="color:red") #{message}
      else
         h3 New person, 
            name: #{person.name}, 
            age: #{person.age} and 
            nationality: #{person.nationality} added!

成功提交 form(show_message.pug)时,将收到以下回复-

Mongoose Response

Retrieving Documents

Mongoose提供了许多用于检索文档的函数将重点介绍其中的三个。

Model.find(conditions,callback)

该函数查找与conditions对象中的字段匹配的所有文档, Mongo中使用的相同运算符也可以在Mongoose中工作。如,

Person.find(function(err, response){
   console.log(response);
});

这将从该Person中获取所有文档。

Person.find({name: "Ayush", age: 20}, 
   function(err, response){
      console.log(response);
});

这将获取字段name=" Ayush"且age=20的所有文档。

无涯教程还可以提供所需字段。如,如果只想要nationality为"Indian" 的人的姓名(name),则使用-

Person.find({nationality: "Indian"}, "name", function(err, response){
   console.log(response);
});

Model.findOne(condition,callback)

此函数用于根据条件(condition)查询一条数据,它具有与 Model.find()相同的参数。

Model.findById(id,callback)

此函数根据_id (由mongo定义)查询数据,然后回调查询到的数据。如,

Person.findById("507f1f77bcf86cd799439011", function(err, response){
   console.log(response);
});

现在让无涯教程通过find来查看所有人员记录-

var express=require('express');
var app=express();

var mongoose=require('mongoose');
mongoose.connect('mongodb://localhost/my_db');

var personSchema=mongoose.Schema({
   name: String,
   age: Number,
   nationality: String
});

var Person=mongoose.model("Person", personSchema);

app.get('/people', function(req, res){
   Person.find(function(err, response){
      res.json(response);
   });
});

app.listen(3000);

Updating Documents

Mongoose提供3种函数来更新数据。函数描述如下-

Model.update(condition,updates,callback)

此函数接受条件并更新一个对象作为输入,并将更改应用于与集合中的条件匹配的所有数据

Person.update({age: 25}, {nationality: "American"}, function(err, response){
   console.log(response);
});

Model.findOneAndUpdate(condition,updateds,callback)

它根据查询找到一个数据,并根据第二个参数对其进行更新。它还将回调作为最后一个参数。让无涯教程执行以下示例以了解函数

Person.findOneAndUpdate({name: "Ayush"}, {age: 40}, function(err, response) {
   console.log(response);
});

Model.findByIdAndUpdate(id,updates,callback)

此函数更新由其ID标识的单条数据。如,

Person.findByIdAndUpdate("507f1f77bcf86cd799439011", {name: "James"}, 
   function(err, response){
      console.log(response);
});

现在创建一条更新人员的路由,这将是一条 PUT 路由,以id作为参数。

var express=require('express');
var app=express();

var mongoose=require('mongoose');
mongoose.connect('mongodb://localhost/my_db');

var personSchema=mongoose.Schema({
   name: String,
   age: Number,
   nationality: String
});

var Person=mongoose.model("Person", personSchema);

app.put('/people/:id', function(req, res){
   Person.findByIdAndUpdate(req.params.id, req.body, function(err, response){
      if(err) res.json({message: "Error in updating person with id " + req.params.id});
      res.json(response);
   });
});

app.listen(3000);

要测试此路由,请在终端中输入以下内容(用您创建的 people 中的ID替换ID)-

curl -X PUT --data "name=James&age=20&nationality=American
"http://localhost:3000/people/507f1f77bcf86cd799439011

这将使用上述详细信息更新与路线中提供的ID相关联的文档数据。

Deleting Documents

无涯教程已经介绍了创建,读取和更新,现在将了解如何使用Mongoose来删除文档。这里有3个函数,就像更新一样。

Model.remove(condition,[callback])

此函数将条件对象作为输入,并删除所有与条件匹配的文档。如果需要删除所有20岁的人,请使用以下语法-

链接:https://www.learnfk.comhttps://www.learnfk.com/expressjs/expressjs-database.html

来源:LearnFk无涯教程网

Person.remove({age:20});

Model.findOneAndRemove(condition,[callback])

此函数根据条件对象删除单个最相关的文档。执行以下代码来理解它们。

Person.findOneAndRemove({name: "Ayush"});

Model.findByIdAndRemove(id,[callback])

此函数删除由其ID标识的单个文档。如,

Person.findByIdAndRemove("507f1f77bcf86cd799439011");

现在,创建一条从数据库中删除人员的路由。

var express=require('express');
var app=express();

var mongoose=require('mongoose');
mongoose.connect('mongodb://localhost/my_db');

var personSchema=mongoose.Schema({
   name: String,
   age: Number,
   nationality: String
});

var Person=mongoose.model("Person", personSchema);

app.delete('/people/:id', function(req, res){
   Person.findByIdAndRemove(req.params.id, function(err, response){
      if(err) res.json({message: "Error in deleting record id " + req.params.id});
      else res.json({message: "Person with id " + req.params.id + " removed."});
   });
});

app.listen(3000);

要检查输出,请使用以下curl命令-

curl -X DELETE http://localhost:3000/people/507f1f77bcf86cd799439011

这将删除具有给定id的人,并产生以下消息-

{message: "Person with id 507f1f77bcf86cd799439011 removed."}

这总结了无涯教程如何使用MongoDB,Mongoose和Express创建简单的CRUD应用程序。要进一步探索Mongoose,请阅读 API文档。

祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)

技术教程推荐

朱赟的技术管理课 -〔朱赟〕

软件测试52讲 -〔茹炳晟〕

白话法律42讲 -〔周甲徳〕

许式伟的架构课 -〔许式伟〕

性能工程高手课 -〔庄振运〕

编译原理实战课 -〔宫文学〕

说透芯片 -〔邵巍〕

网络排查案例课 -〔杨胜辉〕

遗留系统现代化实战 -〔姚琪琳〕

好记忆不如烂笔头。留下您的足迹吧 :)