MongoDB及可视化工具下载:
概念,document中的一条具体的数据就是一个json文件,而json文件中的一个个字段就是一个个field:
说明:api是一个数据库,里面由集合组成
说明:这是一条文档
为了使得node服务器操作数据库,要下载第三方插件 :
启动MongoDB服务:
连接数据库:
字符串中的mongodb是协议,localhost是请求地址,playground是数据库,写第二个参数是因为没写它时控制台有提示,若连接成功执行then,否则执行catch(比如请求地址错误):
继续创建集合,集合规则规定了属性,model的第一个参数是集合名字,它的首字母要大写,但是实际创建后是course,model返回的是一个构造函数:
插入一条数据才能创建出数据库:
执行命令后查看数据库:
插入文档的另一种方式:
又另一种:
导入json数据到数据库中:
将monggoimport注册到path变量中:
重启cmd,输入命令,将当前目录下的文件user.json的数据导入数据库名为playground的user集合:
利用find和findOne查询符合条件的数据,find返回符合条件的一个数组,findOne返回符合条件的第一条数据:
说明:最后的一行表示,对查询出来的数据,只看name,email字段,不看_id字段,如果不写-_id,则还是会显示出id字段。
说明:跳过前2个文档,开始查找,找到2个符合条件的文档就停止。
删除一条符合id文档:
删除所有文档:
更新第一条符合条件的文档:
说明:第一个参数是查询条件,第二个参数是要改成什么
全部更新文档:
验证,由于有required:true,则插入数据时必须有title,第二个参数为自定义的错误提示信息:minLength:最小接受的字符长度。trim可以去掉插入字符串的首尾空格:
说明:当没有输入publishDate时,使用默认的现在时间
说明:插入数据时,必须输入enum规定的类别。
自定义验证:
得到错误信息,error中有errors对象,这个对象记录了各个属性所报的错误,每个错误当中包含有错误信息:
自定义enum的错误信息:
集合关联,让文章集合和用户集合进行关联,文章的author代表每一个用户,在文章集合中的author只用记录用户的id就行了,而用户集合记录了每个用户的详细信息,插入数据后,用populate补充作者一栏的详细关联信息:
说明:是文章的author关联集合User。
返回Post所有信息,同时还会在对应位置补充关联信息
zzz
案例:用户的增删改查:
通过json导入数据:
编写app.js:
说明:hobby表示能输入多个爱好,用数组表示,每个元素是string类型。
详细代码:C:\aaa2222339\download\11-16 前后端交互\11-13node+express\day03\code
art-template 模板引擎
下载:
新建模板文件:
同时在app.js中如下编辑,就能把模板html文件当中的变量name和age替换了,实现数据与模板拼接:
模板语法,还能运算,使用@能解析标签:
条件判断,修改模板文件:
循环,value代表users里面的当前元素:
子模块:多个页面的公共部分可以拿出来做子模块。在common文件夹下新建header和footer文件假定为子模块,在上一级目录中新建一个一般文件并引入这个两个文件 :
模板继承,在common文件夹下新建layout.art作为骨架模板,使用block可以给继承它的模板预留代码位置:
让其他文件继承它,并在对应位置写入代码:
模板引擎,日期进行处理:
下载插件,将方法导入到模板文件当中,然后对数据进行处理:
通过设置模板根目录和后缀,简化template参数,后缀也能改成.html,如果写了后缀就不看默认后缀了,如果没写就看:
说明:此时上面找的06.art,下面找07.html
案例:学生档案管理,要用到第三方模块router来实现路由功能,不用像之前那样手写很多了,router有get和post方法用于处理它们。router(req,res,回调函数)能够判断是get还是post,并且在处理完get或post时,再调用它的回调函数做些事情,注意这个回调函数必须写。当发现是用get方法请求时,router.get第一个参数是客户端请求的地址,第二个函数是对请求的处理 :
还要使用第三方模块serve-static来使用静态资源访问服务:
说明: 重新开启服务
说明:参数是静态资源所在的路径
说明:通过req判断客户端是否在请求静态资源,若是,则返回所需的静态资源。
代码:C:\aaa2222339\download\11-16 前后端交互\11-13node+express\day04
Express框架创建服务器:
下载:
可以识别get和post请求,当有get请求且访问的是/时,执行相应app.get('/'):
还能返回对象:
使用中间件可以一步步的处理请求:
使用next让下一个中间件进行处理,否则就只匹配一次了:
use,当get请求/list时,执行路径是:第一个-》第三个
错误处理中间件:
处理同步错误:抛出同步错误之后,app.use能捕获到了,从而执行app.use
处理异步错误时,必须写next才能执行app.use:
try,catch捕获异步函数错误,当await那行错误时,就会进入catch里面执行,如果没错,就执行catch外面的代码:
函数也是对象,也可以用方法作为属性。创建二级路由,命名为home,当客户端访问/index/home时,才能看到提示信息:
模块化路由:
在router文件夹下创建admin.js和home.js作为模块成员:
当浏览器输入/home/index,则使用home模块,当输入admin/index,则使用admin模块:
获取get参数:
获得post参数:
npm install body-parser,用req.body获取
获得路由请求参数,通过url传参:
假定静态资源都在public目录下,静态资源访问:
express.static()方法判断客户端的请求是否是静态资源,若是则返回静态资源,否则通过next让别人来处理:
还能使路径虚拟化来迷惑人,此时浏览器的url就得变了:
模板引擎:
在当前目录下创建views文件夹,再在里面创建模板index.art:
当前js文件重要的三行,如果换用别的art,则在这里面将art改成别的:
当客户的url是/index时,用默认的art去拼接没有写后缀的index,形成index.art,接着去index.art下,将这个模板的对应变量msg解析成传入的'message',并返回给客户端
再造一个模板:
app.locals:
修改模板:
给app.locals添加属性,这个属性是公用的,所有模板就能使用它的属性,不用再通过res.render:
访问: