nodejs自己随便写写
node全局对象
1 | process是一个global全局对象,对于 Node.js 应用程序始终是可用的,故无需使用 require() |
path
1 | path.join()路径拼接 |
events
1 | events模块只提供了一个对象: events.EventEmitter。EventEmitter 的核心就是事件触发与事件监听器功能的封装。 |
promise
1 | Node.js 异步编程的直接体现就是回调。 |
exec和spawn
1 | // 比如要运行 du -sh /disk1 命令, |
path
1 | const path1 = require('path'); |
typescript的ts文件中如果报找不到require关键字的话,需要安装下yarn add @types/node 即要require是在node模块中。
js和nodejs分析
js(偏向于前端浏览器): ecmascript(语法基础)+bom(操作浏览器)+dom(操作html页面元素)
nodejs(偏向后端):V8+ecmascript+os+fs+path+net+db+event等等
早期javascript是只能运行在浏览器中。而nodejs使得js脱离浏览器运行在后台。然后要想js运行在后台,首先要保证js要先被解释后正确的运行,而nodejs中就包含了google chrome的v8引擎(解释和运行js代码,非常高效),除此之外,nodejs中还提供了许多有用的模块,如os,fs, path,event, http模块等等。因此nodejs是基于chrome v8引擎的js的运行环境。同时他也是一个库。
而nodejs中一些模块的书写,当然要遵循一定的规范。如commonjs, amd,cmd规范。指定模块引用require,模块定义exports,模块标识module。而nodejs就是实现了这种规范。commonjs中一个单独的文件就是一个模块,每个模块都是一个单独的作用域,每个模块内部,都有一个module
对象,代表当前模块。它有许多属性,常见就是exports标识模块的对外输出。还有模块的id,filename等等。
nodejs的特点:异步io,事件驱动,单线程。(用到callback和eventemitter)
还有nodejs默认使用npm包管理器进行管理依赖包。推荐是yarn吧(更快)。
typescript
js的超集,主要特点在js的动态语言的特性上添加type(类型),即提供给开发者在编译时就进行类型检查,避免了很多动态类型导致的莫名其妙的错误。当然了ts也提供了其他的新特性,如解构函数,数组值遍历for of,装饰器decorator,同时也提供了相对应的编译器tsc对ts文件进行编译成js代码。 默认使用es6中模块import和export的操作。
gulp自动化构建工具,利用好各种库(压缩文件,sass转css等等),定义好task及其顺序。既可以自动化构建。
nodejs
- fs.unlink(‘file’,callback), fs.mkdir(‘dir’,callback), fs.rmdir(‘dir’, callback)异步操作等等。
- 管道和流: 例子: ls | grep app 将ls的输出作为grep的输入。中间的|表示管道流stream的意思。nodejs所有的流都是eventemitter的实例。stdin, stdout, stderr,以及http的req,resp都是流。nodejs有一个流对象Stream。
- 读文件时readFile是将读到的数据一下子都放到的内存中,如何文件很大是就不适合用这种方式处理,这个时候就要用到stream。stream是把数据一边放到buffer中,一边处理。这样性能就会很高。
expressjs
熟悉下jade吧,express中默认的模板引擎。改名为了pug。支持模板继承extends和include语法简洁了不少。不用ejs模板引擎是是由于写ejs让我有一种之前写jsp的恶心<% %>,花括号满天飞。jade简直简洁的飞起。
layout.jade文件
1 | doctype html |
view-> user.jade文件
1 | extends layout |
app.js
1 | var createError = require('http-errors'); |
db.js 用的mysql
1 | const mysql = require("mysql") |
userService.js
1 | const Q = require('q') |
route-> users.js
1 | var express = require('express'); |
总体来说,express的web开发还是很简单的。