- node.js 既不是语言,也不是框架,他是一个平台。
它是一个运行环境,用来配合服务器开发人员协同开发 - node.js中的 javascript:
没有DOM BOM ;EcmaScript 基本的javaScript语言部分;
在node中javascript提供了一些服务器级别的API-
文件操作的能力 require (‘fs’)
(1.1) fs.readFile(‘路径+文件’,function(err,data))
(文件中存储的其实都是二进制数据 0 1),所以用 toString 的方法转换
成功 :data 返回数据 err null
失败 : data undefined err 错误对象
(1.2)fs.writeFile(‘路径+文件’ , ‘写入的数据’ ,function(error,){}) -
http服务的能力 require(‘http’)
(2.1)var server = http.createServer() 创建一个 Web 服务器,返回一个server实例
(2.2) server.on(‘request’,function(request,response){
response.write();
response.end() 结束
return response.end()})
- - 不同的资源对应的 Content-Type 是不一样,具体参照: http://tool.oschina.net/commons
-
- 对于文本类型的数据,最好都加上编码,目的是为了防止中文解析乱码问题
- 通过网络发送文件
-
发送的并不是文件,本质上来讲发送是文件的内容
-
当浏览器收到服务器响应内容之后,就会根据你的 Content-Type 进行对应的解析处理
服务器的作用: 提供服务:对 数据的服务,发请求,接收请求,处理请求,给个反馈(发送响应),注册request 请求事件,当客户端请求过来,就会自动触发服务器的 request 请求事件,然后执行第二个参数:回调处理函数
(2.3) server.listen(3000,function(){}) 绑定端口号,启动服务
- os系统服务能力 require(‘os’)
- path 路径操作模块
path.extname()获取文件拓展命
-
-
EcmaScript : 变量 方法 数据类型 内置对象 array Object date math
-
模块系统:
(1)在Node中没有全局作用于的概念、
(2)在node中只有通过require方法来加载折行多个javascript脚本文件
(3)require 加载只能是折行其中的代码,文件和文件之间由于是模块作用域,
所以不会有污染的问题(也就是不会有冲突覆盖的问题)
(3.1)模块完全是封闭的
(3.2)外部无法访问内部,反之亦然
(4)模块作用域固然带来了一些好处,可以加载执行多个文件,可以完全避免变量命名冲突污染的问题
(5) 在某些情况下,模块之间是需要通信的吗,这是要运用挂载的方法,把要执行的模块用 exports 模块挂载起来。exports 默认是一个空对象。
(6)在 Node 中,模块有三种:
具名的核心模块,例如 fs、http
用户自己编写的文件模块
相对路径必须加 ./
可以省略后缀名
相对路径中的 ./ 不能省略,否则报错
在 Node 中,没有全局作用域,只有模块作用域
外部访问不到内部
内部也访问不到外部
默认都是封闭的(7)端口
ip 地址用来定位计算机
端口号用来定位具体的应用程序(8) 文本内容的字符编码格式的设置
// require
// 端口号
var http = require('http')
var server = http.createServer()
server.on('request', function (req, res) {
// 在服务端默认发送的数据,其实是 utf8 编码的内容
// 但是浏览器不知道你是 utf8 编码的内容
// 浏览器在不知道服务器响应内容的编码的情况下会按照当前操作系统的默认编码去解析
// 中文操作系统默认是 gbk
// 解决方法就是正确的告诉浏览器我给你发送的内容是什么编码的
// 在 http 协议中,Content-Type 就是用来告知对方我给你发送的数据内容是什么类型
// res.setHeader('Content-Type', 'text/plain; charset=utf-8')
// res.end('hello 世界')
var url = req.url
if (url === '/plain') {
// text/plain 就是普通文本
res.setHeader('Content-Type', 'text/plain; charset=utf-8')
res.end('hello 世界')
} else if (url === '/html') {
// 如果你发送的是 html 格式的字符串,则也要告诉浏览器我给你发送是 text/html 格式的内容
res.setHeader('Content-Type', 'text/html; charset=utf-8')
res.end('<p>hello html <a href="">点我</a></p>')
}
})
server.listen(3000, function () {
console.log('Server is running...')
})
(9) res.end() 支持两种数据类型,一种是二进制,一种是字符串
// 响应内容只能是二进制数据或者字符串
// 数字
// 对象
// 数组
// 布尔值
res.end(JSON.stringify(products))