不是语言,不是框架,不是库。
JavsScript运行时环境,可以解析和执行js代码。(以前只有浏览器可以)
Node.js® is a JavaScript runtime built on Chrome’s V8 JavaScript engine.
构建于chromes的V8引擎(解析执行js最快),开发了一个独立的js运行时环境
Nod.js uses an event-driven,non blocking I/O model that makes it lightweight and efficient
event-driven事件驱动
non-blocking I/o model 非阻塞IO模型(异步)
lightweight and efficient轻量,高效
node.js npm是最大的开源库生态系统
绝大多数js相关的包放在了npm上,方便下载
npm install jquery
学习目标
官网 默认路径
查看版本:在cmd 输入
node -v
创建helloworld.js编写脚本文件
var foo ='bar'
console.log(foo)
打开终端,cd到文件所属目录。或者在文件夹里,按住shift右键-在此处打开powershell
输入 ,回车运行
node helloworld.js
fs模块:(file-system)提供所有文件操作相关的API。
读取文件函数:fs.readFile( , )
第一个参数:读取文件路径
第二个参数:一个回调函数:function(error,data)
读取成功 | 读取失败 | |
---|---|---|
error | null | 包含报错信息的一个error对象 |
data | 读取到的数据 | undefined |
var fs=require('fs') //加载fs模块
fs.readFile('./data/read.txt',function(error,data){
if (error){
console.log('读取文件失败')
}
else{
console.log(data.toString())
}
})
写文件函数:fs.writeFile( , )
第一个参数:写文件路径
第二个参数:写的内容
第三个参数:一个回调函数:function(error,data)
var fs=require('fs') //加载fs模块
fs.writeFile('./data/write.txt','hello world',function(error){
console.log('write succeed')
})
http模块:创建编写服务器
服务器要做到:
var http = require('http')
var server = http.createServer()
/*注册request请求事件,当客户端发请求,自动触发服务器的request请求事件
然后执行第二个参数进行回调处理*/
server.on('request',function(){
console.log('收到请求')
})
//绑定端口号,启动服务器
server.listen(3000,function(){
console.log('服务器启动成功,可在浏览器通过127.0.0.1:3000 本机回送IP访问')
})
ctrl+c 可以关闭客户端
带上if判断,稍微复杂一些的情况
var http = require('http')
var server = http.createServer()
//request请求对象,用来获取请求信息,例如请求路径
//response响应对象用来给客户端发送响应消息
server.on('request',function(request,response){
console.log('收到请求,路径为:'+request.url)
//response 对象有一个方法:write 可以用来给客户端发送响应数据
//write可以使用多次,但是最后一定要使用end来结束响应,否则客户端会一直等待
if (request.url=='/haha'){
response.write('hello')
}
response.write('node js')
response.end()
})
server.listen(3000,function(){
console.log('服务器启动成功,可通过127.0.0.1:3000访问')
})
当在浏览器输入 http://127.0.0.1:3000/haha 时响应为
若输入内容有中文,可能会有乱码现象,需要指定编码:(详见官网对api的解释,可以为普通,htmp等)
response.writeHead(200, {'Content-Type': 'text/html; charset=utf-8'});
或
response.setHeader('Content-Type','text/html; charset=utf-8')
Node为js提供了很多服务器级别的API,这些API绝大多数被包装到了一个具名的核心模块中了。例如文件操作中的fs模块,http服务器构建的http模块,path路径操作模块,os操作系统模块。。。
引用模块格式:
var fs = require('http')
在a.js中代码如下
console.log('a start')
require('./b.js')
console.log('a end')
同文件夹下,b.js代码如下
console.log('b.js run')
运行a.js,powershell结果如下:
PS G:\code\nodejs> node a.js
a start
b.js run
a end
a.js
var bExorts = require('./b')//通过bExorts变量调用其模块内部的方法和数据
console.log(bExorts.data)
console.log(bExorts.fadd(10,20))
b.js
var foo='bbb'
function add(x,y){
return x+y
}
//向exports对象动态添加方法(function)或者参数,则可以在其他文件中被调用
exports.fadd=add//此处故意用不一样的名字,表达命名是随意的,但是建议用一样的,以免歧义
exports.data='hello'
在同文件夹下建一个source文件夹,放入需要被读入的html文件 test.html
var http = require('http')
var server = http.createServer()
var fs =require('fs')
server.on('request',function(request,response){
console.log('收到请求,路径为:'+request.url)
//‘/’就是一个url:统一资源定位符
if (request.url=='/'){
fs.readFile('./source/test.html',function(err,data){
if (err){
response.setHeader('Content-Type','text/plain; charset=utf-8')
response.end('文件读取失败')
}
else{
response.setHeader('Content-Type','text/html; charset=utf-8')
response.end(data)
}
})
}
})
server.listen(3000,function(){
console.log('服务器启动成功,可通过127.0.0.1:3000访问')
})
注意content-type ‘text/html’
不同资源对应不一样,于https://tool.oschina.net/ 可以查询