前言
前些天一直在youtube逛nodejs的教程,然后我发现了ninjas这个教程,里面的视频内容很赞哦,比较全面的介绍了nodejs的内容,从对文件的操作,到express,nodemon,body-parser等框架的应用场景,以及Middleware的概念让我受益匪浅,现在让我粗略总结一下关于nodejs的东西吧
nodejs是什么
nodejs是基于google chrome v8 engine写的c++程序,它是javascript应用服务器端的语言
npm 模块管理包
以下,我主要讲述npm的一些指令,而不是讲述其底层的工作原理,鉴于我知识面的限制。
- npm i express 安装express模块
- npm i express -g 全局安装express模块,并express写入环境变量,这样在全机都可以运行express模块
- npm i express -save 安装express模块,并将此依赖保存在package.json文件中
- npm uninstall express 写在express模块,注意package.json文件中并不会将对应的dependencies删除
- npm install 此时会查找你的package.json文件中的dependencies,并将里面的模块都安装在你所在的目录之下
对象的继承
nodejs中的inherits
方法,能够让一个对象继承另一个对象的属性(底层操作应该也是复制对象),i.e
|
|
文件操作
mkdirSync
是创建folder的同步操作,这是阻塞性的操作。rmdirSync
是删除folder的同步操作
mkdir
, 基于nodejs是单线程,非阻塞的工作模式,故其是非阻塞式的异步操作,i.e.
rmdir
,删除folder的异步操作
unlink
删除file
writeFile
先创建文件,再写字符串进去(string/stream),如果是json格式,则需要json.stringify()
来将该对象转换为字符串
同理readFile则是读文件,他们都具有异步和同步两种方法
stream & buffer
stream 是对buffer的高级封装,其操作的底层仍是buffer对象
buffer 是数据缓存对象,类似数组对的数据结构,其主要作用是
将少量的数据存储在buffer中,当buffer中的数据已经装满后,就将其运输到目的地,然后,再重新前面的步骤,知道所有的数据都运输完成为止
现在让我先创建一个myReadStream出来
pipe
另一种更加简洁的写法是使用pipe,其原理与上面的所写的差不多
express 快速处理不同的路由/跳转到不同的url
说到路由,现在列出http的方法
- app.listen(3000);
- app.get(‘route’, fn);
- app.post(‘route’, fn);
- app.delete(‘route’, fn);
|
|
然后另一种是动态的路由 route param
ejs template
ejs是一个模板引擎用来渲染动态的html
|
|
<% %>
这是ejs的语法,而它的参数通常是通过ajax来获取的,另外一种表达式则是<%= %>
而后台的传送则是通过
ejs还有另外一种语法,而此语法有助于模块化的开发
这样子就相当于将nav封装在nav.ejs中,而其他页面若想要调用可以直接写上这条代码即可
middleware
middleware的含义便是中间件,可以解释为将具体业务与底层逻辑解耦的组件,目前我所接触到的middleware有body-parser,express中的static方法
express.static是用于共享资源的,比如说,当你在ejs文件当中引入了一个css文件,然后你在localhost中无法访问到那个css文件,这说明在服务器的文件结构并不像你本地文件的结构,所以此时就可以向服务器指定你资源的准确位置,这样ejs才能访问到你的css文件,代码如下
123app.use('/assets',express.static('asstets'));//注意即便你将你本地那个文件重命名,你再浏览器中访问/assets,仍然能够访问到那资源//注意第一个就是你所指定的路由body-parser
body-parser是一个请求体解析中间件,在实际应用中,不同路径(路由)可能会要求用户所以不同的内容类型,body-parser
还支持为单个express路由添加请求体解析:12345678910111213141516171819202122var express = require('express'),bodyParser = require('body-parser'),app = express(),//创建application/json解析jsonParser = bodyParser.json(),//创建application/x-www-form-urlencoded解析urlencodedParser = bodyParser.urlencoded({extend:false});//extend不知道是什么//POST/login 获取url编码的请求体app.post('/login',urlencodedParser, function (req,res) {//req.body获取请求体if(!req.body) return res.sendStatus(400);res.send('welcome, '+req.body.username);});//POST /api/users获取json编码的请求体app.post('/api/users',jsonParser,function (req,res) {if(!req.body) return res.sendStatus(400);//create user in req.body})
nodemon 监控框架
nodemon可用于监控文件是否有所改动,后台js文件有所改动,nodemon都会重启node,然后直接在浏览器就可以浏览到已经修改的结果,若改动的是前端的js文件,则需要使用rs指令来重启服务器,nodemon app.js
是运行app.js文件的指令
mongodb & mongoose
看到mongodb和mongoose发现,这真的是很简洁的创建数据库,以及操作数据库的方式,比起oracle来说,真的简单许多
现在来说一下mongodb在云端上的存储mlab。