![](https://img.haomeiwen.com/i20195020/ca4260304b1aa179.png)
1、新建是投入的难题文件夹,切换到命令行中,新建package.json文件。
![](https://img.haomeiwen.com/i20195020/c0cc04cb60a76288.png)
在student下新建app.js文件,创建网站服务器,并实现客户端的请求和访问。用到http模块。creatserver就是来创建服务器的。
![](https://img.haomeiwen.com/i20195020/e322cc39ff88f3db.png)
如果在网站输入网址访问一个网站的时候,如果没有输入端口,默认会加入80端口。
![](https://img.haomeiwen.com/i20195020/aced049f8eb43673.png)
nodemon 启动app.js
![](https://img.haomeiwen.com/i20195020/a8737faa88b7cd6e.png)
地址栏中输入localhost,就可以看到ok,说明客户端和服务端实现了通信。
连接数据库,
![](https://img.haomeiwen.com/i20195020/17209f1d24a09adc.png)
npm install mongoose。nodemon重新开启服务器。
导入mongoose数据库
![](https://img.haomeiwen.com/i20195020/2f6e31dfb9c2c0ec.png)
mongoose.connect连接数据库,第一个参数是固定的,mongodb://localhost/后面这个是可以自己写的,我们依然连接playground这个数据库。
![](https://img.haomeiwen.com/i20195020/4c060995d9f29074.png)
then和catch可以看这个数据库是否连接成功
![](https://img.haomeiwen.com/i20195020/db6e049b4be8428a.png)
连接成功,不想看到提示信息,还是复制这块,加到
mongoose.connect 第二个参数里。此时,客户端--服务器--数据库连接成功了。但是数据库这个模块,我们是不能直接写在app.js里面的,要分离出去。在student文件夹下面新建model,新建connect.js文件
![](https://img.haomeiwen.com/i20195020/795165d56266392d.png)
把app.js这段代码剪切走到connect.js里面粘贴
![](https://img.haomeiwen.com/i20195020/9071e8714c61a475.png)
然后用require把connect文件引回来。这里不需要返回结果,所以不需要用变量接收。
![](https://img.haomeiwen.com/i20195020/67c55cba569be86a.png)
根据这个信息设置集合规则,
在model文件夹下新建user.js文件,这里面设定集合规则和创定学生信息集合
![](https://img.haomeiwen.com/i20195020/e1807ca1e3c66147.png)
model返回集合的构造函数,用变量Student接受。model两个参数,第一个创建的集合名称,第二个,使用的集合规则。
![](https://img.haomeiwen.com/i20195020/25755af362e59728.png)
集合的信息需要被外面引用,用module.export导出
![](https://img.haomeiwen.com/i20195020/8342a485cbb4bc23.png)
在app.js中用变量Student来接受user集合。如此,实现了客户端,数据库,服务端的连接。
![](https://img.haomeiwen.com/i20195020/c6783f0f85d8ff69.png)
下载router和启动app.js
![](https://img.haomeiwen.com/i20195020/a2a1ada4d940d27c.png)
引入和获得router,router是一个函数
![](https://img.haomeiwen.com/i20195020/869c278b92b4a7da.png)
创建了两个路由,第一个路由是获得/test另一个路由是获得/index。get后面req和res这里其实是回调函数的参数,一个处理req,一个回复响应结果。
![](https://img.haomeiwen.com/i20195020/7f7584165304a83d.png)
然后我们要去app.on也就是客户端访问服务器端那里去启动router这个方法,然后把请求对象和响应对象传给他。,后面这个回调函数是必须填的log。
![](https://img.haomeiwen.com/i20195020/21ec220c8abf5a29.png)
输入index也是,返回了index。说明路由成功了。
![](https://img.haomeiwen.com/i20195020/42dca8c78be235fb.png)
返回了两个1,说明上面上面两个路由完成之后,去app.on那里调用了log,返回1
![](https://img.haomeiwen.com/i20195020/a28d9d53c76ce36b.png)
这个log函数暂时不填因为暂时用不上,不填会报错,所以弄一个空函数。
![](https://img.haomeiwen.com/i20195020/f88f21de45358409.png)
前面试测试路由有没有连接成功的,现在把/tex改成add页面,这个路由要把学生档案信息页面呈现出来。第二个路由/list页面,要把学生信息列表页面呈现出来。
![](https://img.haomeiwen.com/i20195020/2df92e44c84767ce.png)
现在去命令行中断开服务器,下载模板引擎
![](https://img.haomeiwen.com/i20195020/1dfccf6c0076aece.png)
在student新建view文件夹,放置模板文件
![](https://img.haomeiwen.com/i20195020/8c56ca7cae3c6b3c.png)
把这三个文件复制粘贴到views文件夹中
![](https://img.haomeiwen.com/i20195020/f662cc2324763952.png)
views里面只放模板文件,所以把css文件夹剪切到新建的public文件夹中。public文件夹放置静态资源文件
![](https://img.haomeiwen.com/i20195020/7ac578f2f70710d0.png)
把模板引擎引入,在路由里渲染这个模板,并把渲染结果响应给客户端
![](https://img.haomeiwen.com/i20195020/0915d9439fbce5dc.png)
引入path模块,这个是用来拼接路径的,因为template那里需要绝对路径。path.join是来拼接路径的,——dirname是获得绝对路径,这里是在student下,然后加一个views就是模板所在的路径
![](https://img.haomeiwen.com/i20195020/0f0a5250b58bfc1a.png)
由于template规定的,我们得把views里面的两个文件的后缀名改成art
![](https://img.haomeiwen.com/i20195020/e47e9d547a1c0bea.png)
我们要在template里面传入需要渲染的文件,暂时没有返回结果,所以后面的回调函数不填。html变量接受这个返回的结果并且res.end返回给客户端
![](https://img.haomeiwen.com/i20195020/a64ecffe957f83b1.png)
去浏览页访问,先生无法访问
![](https://img.haomeiwen.com/i20195020/f2e44470984e1af5.png)
服务器没打开,去用nodemon打开服务器
![](https://img.haomeiwen.com/i20195020/8f7aa24630343da1.png)
这时客户端一直在等待服务器的返回结果
![](https://img.haomeiwen.com/i20195020/2321ef7285be98f2.png)
看到,由于css文件我们没做处理,所以我们要对静态资源进行处理。
![](https://img.haomeiwen.com/i20195020/ded480a98cb26d55.png)
我们要用到第三方的静态模块的,返回的都是方方,serveStatic是方法,返回的serve也是方法,
![](https://img.haomeiwen.com/i20195020/ba80884b93182592.png)
停止服务器,下载serve方法。重新启动服务器
![](https://img.haomeiwen.com/i20195020/2e61053e9b55f422.png)
引入serve模块,调用serveStatic方法,里面第一个参数是个绝对路径,也就是静态的地址,在public里面。
![](https://img.haomeiwen.com/i20195020/70ebd07362c48129.png)
这还是一个方法,用serve接收,必须serve调用了,才能启动这个方法
![](https://img.haomeiwen.com/i20195020/675834e3c9741a3b.png)
还是在app.on那里去调用启动,有两个参数,req和res,把请求对象和响应对象传递给serve方法
![](https://img.haomeiwen.com/i20195020/99e83e53b194d3cb.png)
这时候刷新页面就可以实现了路由功能和静态模块访问
![](https://img.haomeiwen.com/i20195020/d083458cc286f64f.png)
add这块响应过去了,同样的,把list页面也响应渲染给客户端。
![](https://img.haomeiwen.com/i20195020/8d8dd1b19e75173b.png)
客户端也可以看到了
![](https://img.haomeiwen.com/i20195020/6536c0c51c64a269.png)
这个文件就是要添加信息的,我们给form表单添加请求地址。
![](https://img.haomeiwen.com/i20195020/8b56ce3807a26886.png)
请求地址是action属性,请求方式是method属性,
![](https://img.haomeiwen.com/i20195020/f96b241cb5db518c.png)
然后我们要看看我们定义集合规则的时候,都写了哪些属性,这些属性要给到htlm页面,以便提交的数据可以跟数据库匹配。当然,现在还不能匹配,只是通过路由吧数据传到了服务器。
![](https://img.haomeiwen.com/i20195020/28558a124c23104e.png)
然后我们需要添加一个请求地址是add请求方式是post的路由
![](https://img.haomeiwen.com/i20195020/f353154b9ee9dae9.png)
我们还需要引入一个模块,这个模块可以不断的把请求的数据拼接成对象
![](https://img.haomeiwen.com/i20195020/4474481ddbde8e3c.png)
formdata接受来请求的参数,是字符串格式,要转换成对象。我们要用到qureysthin的parse方法。
![](https://img.haomeiwen.com/i20195020/a90b9e012266a0d4.png)
log把解析好的对象输出到控制台,然后给客户端一个相应,不然客户端会一直等待。随便相应一个内容abc
![](https://img.haomeiwen.com/i20195020/c917e3aa411b6a5a.png)
随便填写内容提交。
![](https://img.haomeiwen.com/i20195020/17f5e90506914593.png)
看到了abc说明提交成功
![](https://img.haomeiwen.com/i20195020/77979efcb6118466.png)
命令行中我们把参数接受过来了。然后我们要把数据添加到数据库里了
![](https://img.haomeiwen.com/i20195020/453aa6a63d8087cd.png)
我们用Student这个方法把刚才处理好的数据接收了并且创建了数据到数据库里面,同时writehead重定向网页,回到list页面。res.end结束请求
![](https://img.haomeiwen.com/i20195020/a8caaec9a4459cc7.png)
在写一个信息提交,
![](https://img.haomeiwen.com/i20195020/57546d8e0acee841.png)
跳转到列表里面了。
![](https://img.haomeiwen.com/i20195020/cf0d797c409ed478.png)
去compass软件看看数据添加没有
![](https://img.haomeiwen.com/i20195020/28ef87bdd399f669.png)
添加了一个数据成功了。
![](https://img.haomeiwen.com/i20195020/8830ca24a7acc44b.png)
在list这个路由器里面我们要拿到数据库里面所有的学生数据,通过Student.find()方法,然后用student接收过来
![](https://img.haomeiwen.com/i20195020/f6b37d18647f458b.png)
colsolelog看看find的学生信息,在浏览器中刷新页面,
![](https://img.haomeiwen.com/i20195020/e565a8f4b8bfb8d2.png)
啥都没有,再去控制台中
![](https://img.haomeiwen.com/i20195020/af2f531565b8e6b4.png)
student是个数组,里面有对象,对象就是我们查询到的学生信息,下面,要把学生信息和模板拼接并且渲染到客户端。
![](https://img.haomeiwen.com/i20195020/4c7347127078a571.png)
template的第二个参数是一个对象,我们添加一个student属性,这个属性其实就是上面student变量【框住那里】,这个student是个数组。list.art是模板,可以通过template语法把获得的student的数据对象根据.属性的方式,添加到模板上去
![](https://img.haomeiwen.com/i20195020/545f6faffd41940f.png)
去list.art模板中,把数据和模板进行拼接。
![](https://img.haomeiwen.com/i20195020/df68f281110344b3.png)
再复制个tr,通过each循环生成tr标签
![](https://img.haomeiwen.com/i20195020/ba53b26108fb1571.png)
value值就是即将填入到表格里面的值,这个不要和name=name那里混淆了,那里是把数据提交给数据库匹配用的,这里就是改变呈现表格里面的值
![](https://img.haomeiwen.com/i20195020/90624d6b49615d2e.png)
刷新页面,发现添加了数据了。但是,性别,爱好,入学时间有问题。
![](https://img.haomeiwen.com/i20195020/c2c693e912a6164a.png)
我们看到,这里男女是用value1 和0来表示的,所以我们还有做个判断,
![](https://img.haomeiwen.com/i20195020/39a1ca3c3cab8cbd.png)
刷新页面
![](https://img.haomeiwen.com/i20195020/6a496900afba1769.png)
把value改一下
![](https://img.haomeiwen.com/i20195020/5af3004e49a83d17.png)
重新提交一个信息看看
![](https://img.haomeiwen.com/i20195020/5518e67026f24568.png)
这个就把数组显示的爱好都用span分开了
![](https://img.haomeiwen.com/i20195020/9a5790e303047627.png)
要处理日日期了
![](https://img.haomeiwen.com/i20195020/fea1f439d96b08ba.png)
光引入不行,要创建个dateformat这个才能调用模板的方法
![](https://img.haomeiwen.com/i20195020/e45d1b665735c4fe.png)
在模板里调用这个方法dateformat,里面传入value的时间参数,后面是格式,
![](https://img.haomeiwen.com/i20195020/4e412cb2e83cf6a2.png)
刷新下没问题
![](https://img.haomeiwen.com/i20195020/a2f02af2b32d21a6.png)
再添加下,看看有没有问题
![](https://img.haomeiwen.com/i20195020/eb900b69432073c9.png)
观察独立的功能代码,看看能不能分开。路由可以离开,在student文件夹新建router文件夹,新建index.js文件
![](https://img.haomeiwen.com/i20195020/117ccdb1c7c54a41.png)
把router剪切到index。js中
![](https://img.haomeiwen.com/i20195020/1116d6002541bbb2.png)
引入相关模块,集合也要粘贴过去,但是路径要改一下看看对不对
![](https://img.haomeiwen.com/i20195020/88304cd688774c28.png)
还用到了模板,所以把模板也引用过来,querysting也要引入过来。
![](https://img.haomeiwen.com/i20195020/16bb11d298c7cc59.png)
刷新一下发现无法访问了
![](https://img.haomeiwen.com/i20195020/70618db4294663cc.png)
发现调用router那里报错了
![](https://img.haomeiwen.com/i20195020/c835fe6bbe65c8cf.png)
开放router代码
![](https://img.haomeiwen.com/i20195020/1d49f3200ba5db7e.png)
重新引回来
![](https://img.haomeiwen.com/i20195020/b2a0e6a8db72170a.png)
再刷新,对的了
![](https://img.haomeiwen.com/i20195020/7d32d109803c4278.png)
路由都是正常的。
![](https://img.haomeiwen.com/i20195020/cb43c6507bd8041a.png)
所有的模块都放到了不同文件夹,app.js就是一个主代码,将各个模块联系起来。
网友评论