Node中的Javascript
- Ecmascript
- 变量
- 方法
- 数据类型
- 内置对象
- Array
- Object
- Date
- Math
- 模块系统
- 在Node中没有全局作用域的概念
- 在Node中,只能通过require方法来加载执行多个js脚本文件
- require加载只能是执行其中的代码,文件与文件之间由于是模块作用域,所以不会有污染问题
- 模块完全是封闭的
- 外部无法访问内部
- 内部也无法访问外部
- 模块作用域固然带来了一些好处,但还是在某些情况系,模块之间需要进行通信
- 在每个模块中,都提供了一个对象:
exports
- 该对象默认是一个空对象
- 把需要被外部访问使用的成员手动挂载到
exports
接口对象中 - 然后谁来
require
这个模块,谁就可以得到内部的exports
接口对象
- 核心模块
- 核心模块是由Node提供的一个个的具名的模块,它们都有自己的特殊标识
- fs 文件操作模块
- http 网络服务构建模块
- os 操作系统信息模块
- path 路径处理模块
- 所有核心模块在使用的时候都必须手动的先使用
require
方法来加载,然后才可以使用var fs = require('fs')
- 核心模块是由Node提供的一个个的具名的模块,它们都有自己的特殊标识
- http
- require
- 端口号
- ip地址定位计算机
- 端口号定位具体的应用程序
- content-type
- 服务器最好把每次响应的数据是什么内容类型告诉客户端,而且要告诉正确形式
- 不同的资源对应的Content-Type是不一样的,具体参照:http://tool.oschina.net/commons
- 对于文本类型的数据,最好都加上编码方式,为了防止中文解析乱码问题
- 通过网络发送文件
- 发送的并不是文件,本质上来讲发送的是文件内容
- 当浏览器收到服务端响应内容之后,会根据你的Content-Type进行对应的解析处理
模块
- 导入方式
- 第三方库
var http = require('http') var fs = require('fs')
- 本地模块
- 被导入处
var b = 'this is b'; exports.b = b; exports.add = function(x,y){ return x + y }
- 导入处
var b_content = require('./b.js') console.log(b_content.b) // this is b console.log(b_content.add(3,5)) // 8
- 被导入处
- 第三方库
- 核心模块
- os
- os.cpus()
- 获取当前计算机的cpu信息
- os.totalmen()
- 获取运行内存大小,单位是字节
- os.cpus()
- path
- path.extname()
- 返回路径的扩展名
- path.join(第一个路径,第二个路径)
- 拼接路径
- path.extname()
- http:处理客户端的网络请求
- http.createServer()
- 创建web服务
- http.createServer()
- fs
- fs.readFlie()
- 读文件
- fs.writeFile
- 写文件
- fs.readFlie()
- query strings:处理客户端通过
get/post
请求传递过来的参数- 需要导入 ‘querystring’ 这个核心模块
get
请求时 querystring 一般是配合 url 核心模块一起使用的get/post
请求最终都需要调用 querystring.parse方法,将请求传递过来的键值对字符串转成js对象,方便操作
- Global:全局共享的,不需要导入模块即可以使用
- __dirname : 文件所在的文件夹路径
- __filename : 文件所在的路径
- require() : 导入需要的模块
- module : 自定义模块时用到
- exports : 自定义模块时用到
- os
端口
计算机中只有一个物理网卡,而且同一个局域网中,网卡的地址必须是唯一的,网卡是通过唯一的ip地址来进行定位
- ip地址用来定位计算机
- 端口号用来定位具体的应用程序
- 所有联网的程序都需要进行网络通信,都必须占用端口号
- 端口号从0-65536之间
- 在计算机中有一些默认端口号,不要使用,例如 http 80 Apache服务器、https 443
- 可以同时开启多个服务,但一定要确保不同服务器占用的端口号不一致才可以
- 在一台计算机中,同一时间同端口号,只能被一个应用程序占用
Content-Type
要点:
- text/plain 普通文本 用于解决中文编码乱码问题,需指定编码方式utf-8
- text/html 发送的是html字符串,需指定编码方式utf-8
- image/jpeg 读取图片资源
var http = require('http');
var server = http.createServer();
server.on('request', function(req,res){
var url = req.url;
if (url === '/plain') {
//
res.setHeader('Content-Type','text/plain; charset=utf-8');
res.end('hello 世界');
} else if (url === '/html') {
//
res.setHeader('Content-Type','text/html; charset=utf-8');
res.end('<p style="color:red;">hello<a href="">点我</a></p>');
}
})
server.listen(3000, function(err, data){
console.log('Server is running...')
})
js中的json方法
JSON.parse()
方法用来解析JSON字符串,构造由字符串描述的JavaScript值或对象JSON.stringify()
返回与指定值对应的JSON字符串,可以通过额外的参数, 控制仅包含某些属性, 或者以自定义方法来替换某些key对应的属性值。