无涯教程不断收到请求,但最终没有将它们存储在任何地方,需要一个数据库来存储数据,为此,将使用称为 MongoDB 的NoSQL数据库。
要安装和阅读有关Mongo的信息,请访问此链接。
现在您已经安装了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);
现在,将创建一个新的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 "检查表单是否显示正确的输出。以下屏幕截图显示了表单的显示方式-
现在,无涯教程将在'/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提供了许多用于检索文档的函数将重点介绍其中的三个。
该函数查找与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); });
此函数用于根据条件(condition)查询一条数据,它具有与 Model.find()相同的参数。
此函数根据_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);
Mongoose提供3种函数来更新数据。函数描述如下-
此函数接受条件并更新一个对象作为输入,并将更改应用于与集合中的条件匹配的所有数据
Person.update({age: 25}, {nationality: "American"}, function(err, response){ console.log(response); });
它根据查询找到一个数据,并根据第二个参数对其进行更新。它还将回调作为最后一个参数。让无涯教程执行以下示例以了解函数
Person.findOneAndUpdate({name: "Ayush"}, {age: 40}, function(err, response) { console.log(response); });
此函数更新由其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相关联的文档数据。
无涯教程已经介绍了创建,读取和更新,现在将了解如何使用Mongoose来删除文档。这里有3个函数,就像更新一样。
此函数将条件对象作为输入,并删除所有与条件匹配的文档。如果需要删除所有20岁的人,请使用以下语法-
链接:https://www.learnfk.comhttps://www.learnfk.com/expressjs/expressjs-database.html
来源:LearnFk无涯教程网
Person.remove({age:20});
此函数根据条件对象删除单个最相关的文档。执行以下代码来理解它们。
Person.findOneAndRemove({name: "Ayush"});
此函数删除由其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文档。
祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)