Node.js 是什么
- Node.js is a JavaScript runtime built on Chrome’s V8 JavaScript engine.
- Node.js 不是一门语言、不是库、也不是框架。
- Node.js 是一个基于Chrome V8 引擎的JavaScript 运行时环境。
- Node.js 可以解析和执行 JavaScript代码。
Node.js 特性是什么
- event-driven 事件驱动
- non-blocking I/O model 非阻塞IO模型(异步)
- lightweight and efficient 轻量和高效
如何通过node来解析脚本文件
创建编写JavaScript脚本文件
打开终端,定位到脚本文件所属目录
输入node 文件名
执行对应的文件
eg: node helloworld.js
注意:文件名不要使用node.js
来命名
在node中,采用Ecmascript进行编码,没有BOM、DOM。
读写文件
fs
为file-system
的简写,在 node
中如果想要进行文件操作,必须引入fs
这个核心模块
读取文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| var fs = require('fs')
fs.readFile('./helloworld.js',function(error, data) { if (error) { console.log('文件读取失败') } else { console.log(data.toString()) } })
|
写入文件
1 2 3 4 5 6 7 8 9 10 11 12 13
| var fs = require('fs')
fs.writeFile('./example01.txt', '这是一个测试文件', function(error) { if (error) { console.log('文件写入失败') } else { console.log('文件写入成功') } })
|
创建web服务器
node中有一个核心模块:http——创建编写服务器
请求事件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| var http = require('http')
var server = http.createServer()
server.on('request', function () { console.log('收到客户端的请求了') })
server.listen(3000, function () { console.log('服务器启动成功了') })
|
响应事件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| var http = require('http')
var server = http.createServer()
server.on('request', function (request, response) { console.log('收到客户端的请求了,请求路径是:' + request.url)
response.write('hello') response.write('nodejs') response.end() })
server.listen(3000, function () { console.log('服务器启动成功了') })
|
根据不同路径响应不同数据
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| var http = require('http') var server = http.createServer() server.on('request', function (req, res) {
var url = req.url
if (url === '/') { res.end('index page') } else if (url === '/login') { res.end('login page') } else { res.end('404 not found') } })
server.listen(80, function () { console.log('服务器启动成功') })
|
模块化
- 在node中,没有全局作用域,只有模块作用域。——外部访问不到内部,内部也访问不到外部。
- 在引入文件时,后缀名可以省略,如:
require('./b.js')
可以写作require('./b')
。但./
一定不能省略。
require方法的作用
- 加载文件模块并执行里面的代码
- 拿到被加载文件模块导出的接口对象:
exports
(默认是一个空对象)
如何让模块与模块之间进行通信?
通过require
引入模块,加载文件模块并执行里面的代码。
1
| var ret = require('./b')
|
使用exports
将需要被外部访问的成员导出。
Content-type
在服务端默认发送的数据,是utf8编码的内容。需要设置响应内容类型来正确显示内容。
1 2 3 4 5 6 7 8 9 10 11 12
| var http = require('http')
var server = http.createServer()
server.on('request', function(req,res) { res.setHeader('Content-type', 'text/plain; charset=utf-8') res.end('hello 世界') })
server.listen(3000, function() { console.log('server is running...') })
|
text/plain
为普通文本
text/html
为html
格式的文本
发送文件中的数据
- 不同的资源需要对应不同的
Content-type
,具体可参考http://tool.oschina.net/commons
- 图片不需要指定编码,一般只为字符数据才指定编码。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
| var http = require('http') var fs = require('fs')
var server = http.createServer()
server.on('request', function(req,res) { var url = req.url if (url === '/') { fs.readFile('./resource/index.html', function(err, data) { if(err) { res.setHeader('Content-type', 'text/plain; charset=utf-8') res.end('文件读取失败') } else { res.setHeader('Content-type', 'text/html; charset=utf-8') res.end(data) } }) } else if (url === '/ab') { fs.readFile('./resource/head-img.jpg', function(err, data) { if(err) { res.setHeader('Content-type', 'text/plain; charset=utf-8') res.end('文件读取失败') } else { res.setHeader('Content-type', 'image/jpeg') res.end(data) } }) } })
server.listen(3000, function() { console.log('server is running...') })
|