node.js

参考: 尚硅谷-node.js

1 命令行基本操作

# 创建文件夹
md hello
# 删除文件夹
rd hello
# 环境变量,不用进入目录即可执行文件

问题,如何找到所有cmd命令的参考文档?

2 线程和进程

如果一个线程负责渲染页面,另一个线程执行js,会有线程安全问题,js是单线程

3 简介

服务器端js环境,js代码直接在系统中运行,脱离浏览器限制
node大部分基本模块都用js编写
google v8引擎 事件驱动 非阻塞/异步io模型
作者ryan dahl,世界大他想去看看,退学,来到智利,开始学编程,学习了ruby on rails,接项目,去客户的地方工作,两年后成为高性能web服务器专家,尝试解决高并发性能问题失败(动机),后有v8引擎,开始写node.js
所有项目瓶颈都是io问题-磁盘速度问题
io阻塞线程执行
node.js是单线程的
node -> 节点 -> 可扩充

领域

web api如rest
实时多人游戏
淘宝在客户端和服务器加node用来渲染页面

4 入门

# 01_hello_node.js
console.log("hello node")
# 终端执行或者右键run
node 01_hello_node.js
commonjs规范

es缺陷: 没有模块化 标准库少 没有标准接口 缺乏管理系统

模块化

在node中一个js文件就是一个模块

# 模块定义 02_module.js
/*
 *  模块化
 *  1.降低耦合
 *  2.方便代码复用
 *  node中每个js代码都在一个函数中(闭包)
 */
console.log("02 module")
// 暴露
exports.x = "module 2 x"
exports.y = "module 2 y"
exports.fn = function() {
    console.log("module 2 fn")
}
=============================
# 模块引用 03_module.js
// 引入其他的模块
// 以相对路径加参数需要加点
var md = require("./02_module")
console.log(md.x)
console.log(md.y)
console.log(md.fn)
练习: 定义math模块

实现加减

# 定义模块 math.js
var math = require("./math")
console.log(math.add(123, 345))

# 引用
var math = require("./math")
console.log(math.add(123, 345))
模块分类

核心模块: node提供的模块
文件模块: 用户自定义的模块

# 核心模块只写名字即可
var fs = require("fs")
console.log(fs)
全局变量相关
// var声明的不是全局变量
// var a = 10
// 不带var声明全局变量
a = 10
// 全局中创建的变量都作为global的属性保存,函数作为方法保存
console.log(global.a)
// 由此可见代码确实运行在函数中(全局无arguments)
// console.log(arguments)
// arguments.callee保存当前执行的函数对象
// node执行代码时会在代码上下方添加函数包起
console.log(arguments.callee + "")

// function (
// exports, // 讲变量或函数暴露到外部
// require, // 用来引入外部的模块
// module,  // 当前模块本身
// 可以使用exports导出,也可以使用module.exports导出
// __filename, // 当前模块文件完整路径 
// __dirname)  // 当前模块目录完整路径
exports
# 模块定义
/*exports.name = "孙悟空"
exports.age = 18
module.exports.sayName = function() {
    console.log("我是孙悟空")
}*/

// 一次导出所有
module.exports = {
    name: "猪八戒",
    age: 28,
    sayName: function () {
        console.log("我是猪八戒")
    }
}
===========================
# 模块引用
var monkeyKing = require("./monkey_king")
console.log(monkeyKing.name)
console.log(monkeyKing.age)
monkeyKing.sayName()

你可能感兴趣的:(node.js)