node.js是非阻塞异步单线程事件驱动的后端型支持高并发的脚本语言。
- 每次的事件只要把javascript脚本语言编译后即可继续执行下个事件,编译后的javascript交给底层libuv来调用node.js的api,而node的底层是多线程的,所以只要执行完事件即可使用回调函数告诉用户执行完成!!!所以这就是所谓的单线程高并发的简单原理!!!!
1.node的学习网站
2.express框架:封装了node的框架,上手容易,简单好用
- http://expressjs.com/ (express官网)
- http://www.runoob.com/nodejs/nodejs-express-framework.html (菜鸟,express的简单实用)
- https://www.cnblogs.com/zhangym118/p/8874239.html (express的脚手架)
3.中间件
- https://www.npmjs.com/package/jsonwebtoken (jwt)
- https://github.com/petkaantonov/bluebird/tree/2.x (bluebird:封装promise,在golble全局变量加上promise属性)
- https://www.npmjs.com/package/nodemon (nodemon)
- https://www.npmjs.com/package/mongoose-auto-increment (芒果DB的自动id递增)
- https://www.npmjs.com/package/body-parser (post方法获取参数)
- https://www.npmjs.com/package/request (node服务端请求第三方接口 )
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------学习过程---------------------------------------------------------------------------
入门:跟着教程打一遍,了解node和它的相关api,然后再百度搜一下框架,再跟着教程打一遍。
进阶:了解一下node的原理,中间件和express的原理。
------------------------------------------------------------------------------------------------------------------------------------------------------------------------
---------------------------------------------------------------------------------遇到的坑----------------------------------------------------------------------------
1.node路由的配置
如果路由不想按照教程那样配置,则可用以下配置:
var app = express();
var routes = require('./routes/mini')
routes(app)
这里有个坑:本以为app这个变量是传给到mini的文件每个文件的,其实是传进mini文件夹的第一个js文件的,
解决多路由不同文件的问题:在mini文件夹的第一个js文件中require其他路由文件并且传进app变量,例如:
require('./login/login')(app)
2.body-parser的顺序问题
body-parser这中间件一定要在router(app)前面引入。
3.node函数回调地狱
因为node.js都是非阻塞异步事件驱动的,每个方法都需要执行一个函数,如果一个接口里面需要回调太多次这样阅读起来就很困难,所以可以用Promise、await/async来处理异步。