node2

MongoDB及可视化工具下载:

node2

 

 node2

 

 node2

 

 node2

 

 node2

 

 node2

 

 node2

 

 概念,document中的一条具体的数据就是一个json文件,而json文件中的一个个字段就是一个个field:

node2

 

node2 

 说明:api是一个数据库,里面由集合组成

node2

 

说明:这是一条文档 

为了使得node服务器操作数据库,要下载第三方插件 :

node2

 

 启动MongoDB服务:

node2

 

连接数据库:

字符串中的mongodb是协议,localhost是请求地址,playground是数据库,写第二个参数是因为没写它时控制台有提示,若连接成功执行then,否则执行catch(比如请求地址错误):

node2

 node2

 node2

 继续创建集合,集合规则规定了属性,model的第一个参数是集合名字,它的首字母要大写,但是实际创建后是course,model返回的是一个构造函数:

node2

 

  插入一条数据才能创建出数据库:

node2

 

 

执行命令后查看数据库:

node2

 

插入文档的另一种方式:

node2

 

又另一种:

node2

 

 导入json数据到数据库中:

将monggoimport注册到path变量中:

 node2

 

node2

 

重启cmd,输入命令,将当前目录下的文件user.json的数据导入数据库名为playground的user集合:

node2

利用find和findOne查询符合条件的数据,find返回符合条件的一个数组,findOne返回符合条件的第一条数据:

node2

 

node2

 node2

 

 说明:最后的一行表示,对查询出来的数据,只看name,email字段,不看_id字段,如果不写-_id,则还是会显示出id字段。

node2

 

 node2

 

 说明:跳过前2个文档,开始查找,找到2个符合条件的文档就停止。

删除一条符合id文档:

node2

 

删除所有文档:

 node2

 

 

 更新第一条符合条件的文档:

node2

 

 

 说明:第一个参数是查询条件,第二个参数是要改成什么

全部更新文档:

node2

 

 

验证,由于有required:true,则插入数据时必须有title,第二个参数为自定义的错误提示信息:minLength:最小接受的字符长度。trim可以去掉插入字符串的首尾空格:

node2

 

 

 node2

 node2

node2

node2

 

 

 node2

 

 

 说明:当没有输入publishDate时,使用默认的现在时间

node2

 

 

 说明:插入数据时,必须输入enum规定的类别。

 自定义验证:

node2

 

 

node2

 

 

得到错误信息,error中有errors对象,这个对象记录了各个属性所报的错误,每个错误当中包含有错误信息:

 node2

 

 

 

 自定义enum的错误信息:

node2

 

 

集合关联,让文章集合和用户集合进行关联,文章的author代表每一个用户,在文章集合中的author只用记录用户的id就行了,而用户集合记录了每个用户的详细信息,插入数据后,用populate补充作者一栏的详细关联信息:

 

node2

 

 

 node2

说明:是文章的author关联集合User。

返回Post所有信息,同时还会在对应位置补充关联信息

node2

 

node2

 

 zzz

案例:用户的增删改查:

通过json导入数据:

node2

 

 编写app.js:

node2

 

 node2

 

node2

 

 说明:hobby表示能输入多个爱好,用数组表示,每个元素是string类型。

详细代码:C:\aaa2222339\download\11-16 前后端交互\11-13node+express\day03\code

art-template 模板引擎

 下载:

node2

新建模板文件:

node2

 

同时在app.js中如下编辑,就能把模板html文件当中的变量name和age替换了,实现数据与模板拼接:

node2

 

 模板语法,还能运算,使用@能解析标签:

node2

 

 node2

 

 条件判断,修改模板文件:

node2

 

 循环,value代表users里面的当前元素:

node2

 

 node2

 

子模块:多个页面的公共部分可以拿出来做子模块。在common文件夹下新建header和footer文件假定为子模块,在上一级目录中新建一个一般文件并引入这个两个文件 :

node2

 

node2

 

node2

 

 模板继承,在common文件夹下新建layout.art作为骨架模板,使用block可以给继承它的模板预留代码位置:

node2

 

让其他文件继承它,并在对应位置写入代码:

node2

 

 模板引擎,日期进行处理:

下载插件,将方法导入到模板文件当中,然后对数据进行处理:

node2

 

 node2

 

 node2

 

通过设置模板根目录和后缀,简化template参数,后缀也能改成.html,如果写了后缀就不看默认后缀了,如果没写就看:

node2

 

node2

 

 说明:此时上面找的06.art,下面找07.html

案例:学生档案管理,要用到第三方模块router来实现路由功能,不用像之前那样手写很多了,router有get和post方法用于处理它们。router(req,res,回调函数)能够判断是get还是post,并且在处理完get或post时,再调用它的回调函数做些事情,注意这个回调函数必须写。当发现是用get方法请求时,router.get第一个参数是客户端请求的地址,第二个函数是对请求的处理 :

node2

 

node2

node2

 

还要使用第三方模块serve-static来使用静态资源访问服务:

node2

node2

 

说明: 重新开启服务

 node2

 

 node2

 

 说明:参数是静态资源所在的路径

node2

 

 说明:通过req判断客户端是否在请求静态资源,若是,则返回所需的静态资源。

代码:C:\aaa2222339\download\11-16 前后端交互\11-13node+express\day04

 Express框架创建服务器:

下载:

node2

 

 

可以识别get和post请求,当有get请求且访问的是/时,执行相应app.get('/'):

node2

 

 

node2

 

 

还能返回对象:

node2

 

 

 使用中间件可以一步步的处理请求:

node2

 

 

 

使用next让下一个中间件进行处理,否则就只匹配一次了: 

node2

 

 

 use,当get请求/list时,执行路径是:第一个-》第三个

node2

 

 

错误处理中间件:

处理同步错误:抛出同步错误之后,app.use能捕获到了,从而执行app.use

node2

 

 

处理异步错误时,必须写next才能执行app.use:

node2

 

 

try,catch捕获异步函数错误,当await那行错误时,就会进入catch里面执行,如果没错,就执行catch外面的代码:

 node2

 

 

 函数也是对象,也可以用方法作为属性。创建二级路由,命名为home,当客户端访问/index/home时,才能看到提示信息:

node2

 

 

 模块化路由:

在router文件夹下创建admin.js和home.js作为模块成员:

node2

 

 

 node2

 

 

当浏览器输入/home/index,则使用home模块,当输入admin/index,则使用admin模块:

node2

 

 

 获取get参数:

node2

 

 

 获得post参数:

npm install body-parser,用req.body获取

node2

 

 

获得路由请求参数,通过url传参:

node2

 

 

 

node2

 

 

 假定静态资源都在public目录下,静态资源访问:

express.static()方法判断客户端的请求是否是静态资源,若是则返回静态资源,否则通过next让别人来处理:

node2

 

 

node2

还能使路径虚拟化来迷惑人,此时浏览器的url就得变了:

node2

 

 

 node2

 

 

 模板引擎:

node2

 

 

 在当前目录下创建views文件夹,再在里面创建模板index.art:

node2

 

 

 当前js文件重要的三行,如果换用别的art,则在这里面将art改成别的:

node2

 

当客户的url是/index时,用默认的art去拼接没有写后缀的index,形成index.art,接着去index.art下,将这个模板的对应变量msg解析成传入的'message',并返回给客户端

 

node2

 node2

 

 

 node2

 

 

再造一个模板:

node2

 

 

 node2

node2

 

 

 app.locals:

修改模板:

node2

 

 

node2

 

 

 给app.locals添加属性,这个属性是公用的,所有模板就能使用它的属性,不用再通过res.render:

 node2

 

 访问:

node2

 

上一篇:Analysis of container and Injection in Java, their history and future.


下一篇:(奇淫技巧)C# 利用反射特性,生成实际的Func类型的委托,可以用于参与数据集合操作