1、什么是node.js?
(1)Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。Node.js 使用了一个事件驱动、非阻塞式 I/O 的模型,使其轻量又高效。
(2)Node.js 的包管理器 npm,成为世界上最大的开放源代码的生态系统。
(3)Node.js 可以解析JS代码(没有浏览器安全级别的限制)提供很多系统级别的API,如:- 文件的读写 fs - 进程的管理 procress- 网络通信 socket- ……
2、为什么要学习nodejs?
node-webkit、nodeOs、express、koa、Jade、EJS、Forever、PM2、Log.i、Grunt、Gulp、Webpack、Mocha、Karma
3、node.js网站
(1)工具:https://nodejs.org/en/
(2)工具安装:https://www.runoob.com/nodejs/nodejs-install-setup.html
(3)连接mongdob:https://www.runoob.com/nodejs/nodejs-mongodb.html
(4)文档:http://nodejs.cn/
4、npm指令
(1)npm -V / npm --version 查询版本
(2)npm install -g cnpm --registry=https://registry.npm.taobao.org 淘宝镜像
(3)cnpm -V 查询版本
(4)npm install supervisor -g 用于运行nodejs程序的管理程序
(5)npm install nodemon -g 在开发node.js应用程序期间使用的简单监视器脚本。
(6)npm install pm2 -g 具有内置负载均衡器的Node.JS应用程序的生产过程管理器。
5、新建服务器server.js
(1)node要导入http模块
let http = require("http");
(2)主机
let hostname = "localhost";
(3)端口
let port = 3000;
(4)创建服务器
http.createServer((req, res) =>{
if(req.url !== "/favicon.ico"){
console.log(req.url);
res.writeHead(200, {"Content-Type":"text/html;charset=utf-8"});
res.write(`<h2>good good study</h2>`)
res.write(`<h2>day day up</h2>`)
res.write(`<h2>we are good boy</h2>`)
res.end();
}
}).listen(port, hostname, () =>{
console.log(`this server is running at http://${hostname}:${port}`);
})
(5)启动指令:node server.js/nodemon server.js
6、什么叫模块化开发?
复杂逻辑代码多的功能分而解之为独立高度封装的单元模块。
7、CommonJs规范
模块定义 define
模块接口暴露 exports
模块导入 require
注意:
(1)模块化开发 AMD异步模块定义(require.js) CMD同步模块定义(sea.js)
(2) NodeJs && webpack 是 CommonJS 规范 的一种实现 ;CommonJS 规范 是 NodeJs && webpack 的 规范 和规则
(3)所有的 js 文件 本身就是 一个模块
(4)nodejs使用的是commonjs规范 注意: nodejs虽然原生支持es6 但它并不支持 es6的import规范
8、接口暴露
导入:let xx = require("xxx")
导出:
(1)一个文件内只能使用一次
module.exports = Object | Function | Array | String | Number | Boolean
(2)一个文件可以使用多次
exports.xxx = Object | Function | Array | String | Number | Boolean
下列写法不被允许 它会改变exports对象的引用导致程序运行出错
exports = {
xxx : "text"
}
举例说明:
(1)module.exports = {};
let arr = ["小红", "小黄", "小明"];
let str = "我要飞的更高,飞的更高";
let obj = {
age : "18",
name : "jack",
content : "money"
}
function setUsername(username){
return `${username} 说:every day day up`;
}
module.exports = {
arr,
str,
obj,
setUsername
}
(2)exports key = value;
const getSomeone=(someone)=>{
return `<h3>${someone} word hard for 12000 RMB </h3>`;
}
exports.getSomeone =getSomeone;
exports.word = `<h3>1807 你们努力了吗</h3>`;
es6的import规范
方式1
导入:
import XXX from "xxx"
导出:
export default xxx
该种方式一个文件内只能使用一次
方式2
导入:
import {XXX} from "xxx"
import {XXX as YYY} from "xxx" //将模块XXX给个别名为YYY
导出:
export let | const | var | function | class | interface XXX = ....
或者
let(可以是其他声明符) XXX = ....
export {XXX}
上述导出方式可以在同一个文件内使用多次举例说明:(1)export defaultexport default{ say(){}}