ExpressJS数据库 ExpressJS表格数据 ExpressJS Cookies 我们不断收到请求,但最终没有将它们存储在任何地方。我们需要一个数据库来存储数据。为此,我们将使用名为 MongoDB 的NoSQL数据库。 要安装和阅读有关Mongo的信息,请点击此链接 为了将Mongo与Express一起使用,我们需要一个用于节点的客户端API。我们有多种选择,但对于本教程,我们将坚持使用 mongoose : http://mongoosejs.com/ 。Mongoose 用于MongoDB的Node中的 文档建模 。对于文档建模,我们创建一个 Model (非常类似于面向文档的编程中的 类),然后我们使用这个Model 生成 文档 (就像我们在OOP中创建 一个类的文档)。我们所有的处理都将在这些“文档”上完成,最后,我们将在这些文档中编写这些文档。 设置Mongoose 现在您已经安装了Mongo,让我们安装Mongoose,就像我们安装其他节点包一样 npm install --save mongoose 在我们开始使用mongoose之前,我们必须使用Mongo shell创建一个数据库。要创建新数据库,请打开终端并输入“mongo”。一个Mongo shell将启动,输入以下代码 use my_db 将为您创建一个新数据库。无论何时打开mongo shell,它都将默认为“test” db,您必须使用与上面相同的命令更改为数据库。 要使用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); 上面的代码定义了一个人的模式,用于创建一个Mongoose模式 人员 。 保存文件 现在,我们将创建一个新的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 中添加一个 新的get路由 来呈现此文档 app. get('/person', function(req, res){ res.render('person'); }); 转到“ localhost:3000/person ”以检查表单是否显示正确的输出。请注意,这只是UI,它还没有工作。以下屏幕截图显示了表单的显示方式 我们现在将在 '/person' 中定义一个后处理程序处理程序,它将处理此请求 app.post('/person', function(req, res){ var personInfo = req.body; //Get the parsed information 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() 函数将其保存到我们的DB中。这是在Mongoose中定义的,并接受回调作为参数。这个回调有2个参数 - 错误和响应。这些参数将呈现 show_message 视图。 要显示此路线的响应,我们还需要创建一个 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) 我们现在有一个创建 persons 的界面。 检索文件 Mongoose提供了许多检索文档的功能,我们将重点关注其中的3个。所有这些函数也将回调作为最后一个参数,就像save函数一样,它们的参数是错误和响应。这三个功能如下 Model.find(conditions, callback) 此函数查找与条件对象中的字段匹配的所有文档。Mongo中使用的相同运算符也适用于mongoose。例如, Person.find(function(err, response){ console.log(response); }); 这将从该人的集合中获取所有文档。 Person.find({name: "Ayush", age: 20}, function(err, response){ console.log(response); }); 这将获取字段名称为“Ayush”且年龄为20的所有文档。 我们还可以提供我们需要的投影,即我们需要的字段。例如,如果我们只想要国籍是"Indian"的人的名字,我们使用 Person. find({nationality: "Indian"}, "name", function(err, response){ console.log(response); }); Model.findOne(conditions, callback) 此函数始终提取单个最相关的文档。它与 Model.find() 具有完全相同的参数。 Model.findById(id, callback) 此函数将 _id (由mongo定义)作为第一个参数,一个可选的投影字符串和一个处理响应的回调。例如, Person.findById("507f1f77bcf86cd799439011", function(err, response){ console.log(response); }); 现在让我们创建一条查看所有人员记录的路线 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个更新文档的功能。功能描述如下 - Model.update(condition, updates, callback) 此函数采用条件并将对象更新为输入,并将更改应用于与集合中的条件匹配的所有文档。例如,以下代码将更新所有Person文档中的“American”国籍 Person.update({age: 25}, {nationality: "American"}, function(err, response){ console.log(response); }); Model.findOneAndUpdate(condition, updates, 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); 要测试此路线,请在终端中输入以下内容(将ID替换为您创建的 people 的ID ) curl -X PUT --data "name = James&age = 20&nationality = American "http://localhost:3000/people/507f1f77bcf86cd799439011 这将使用上述详细信息更新与路径中提供的id相关联的文档。 删除文件 我们已经介绍了 创建,读取 和 更新 ,现在我们将看到如何使用Mongoose来 删除 文档。我们这里有3个功能,就像更新一样。 Model.remove(condition, [callback]) 此函数将条件对象作为输入,并删除与条件匹配的所有文档。例如,如果我们需要删除所有20岁的人,请使用以下语法 - 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文档 : http://mongoosejs.com/ ExpressJS表格数据 ExpressJS Cookies