node相关知识

node相关知识

创建server.js文件
1,使用require指令载入http模块,然后赋值给一个变量
var http = require(‘http’)
2, 接着使用http.createServer()方法来创建服务,并使用listen方法绑定8888端口
函数通过request,response参数来接收和响应数据
http.createServer(
function(request,response){
//发送http头部
//http状态值200
//内容类型text/plain
response.writeHead(200,{‘content-type’:‘text/plain’})
response.end(‘hello world’)
}
).listen(8888)

3,使用node命令执行以上代码
node server.js

接下来打开浏览器访问http://127.0.0.1:8888/ 会看到hello world

4,node的事件循环

node是单线程的,v8引擎支持回调函数,所以能处理大量并发,node.js使用事件驱动模型

*node事件驱动

node.js有多个内置的事件,可以通过引入events模块,events模块只提供了一个对象eventsEmitter,并通过实例化eventsEmitter类来绑定和监听事件
eventsEmitter的核心就是事件触发和事件监听功能的封装

创建main.js文件
//引入events模块
var events = require(‘events’)
//创建 eventsEmitter对象
var evetnsEmitter = new events.eventEmitter()
//绑定事件及事件的处理程序
eventsEmitter.on(‘事件名称evetnsName’,eventsHandler)
//触发事件
eventsEmitter.emit(‘eventName’)
//执行node
$ node main.js

5,node的模块系统
一个node.js文件就是一个模块
node.js提供了exports和require两个对象
exports和module.exports的区别
*如果外暴露属性或方法,就用exports
*如果外暴露对象,就用module.exports

exports类型

//创建main.js文件
export.world = function(){
console.log(‘hello world’)
}
//创建index.js文件
var temp = require(’./main’)
temp.world()

module.exports类型

//创建main.js文件
module.exports = function hello(){
var name;
this.setName = function(thyName){
name = thyName
}
this.sayName = function(){
console.log(‘hello’ + name)
}
}

//创建index.js文件
var temp = require(’./main’)
temp = new temp()
temp.setName(‘jake’)

6,node.js的路由

路由和服务器整合起来
url以get和post参数在request里;

*url.parse(string).query =>url.parse(‘xxx’).pathName //获取url字符串中的页面名称 get请求
*queryString.parse(queryString)[‘xxx’] //获取url里的参数 post请求

//创建router.js文件

function route(pathName){
console.log(‘about to route a request for’ + pathName)
}
exports.route = route

//创建server.js文件

var http = require(‘http’)
var url = require(‘url’)
function myRoute(route){
function onRequest(request,response){
var pathName = url.parse(request.url).pathName
route(pathName) // 调用route函数
response.writeHead(200,{‘content-type’:‘text/plain’})
response.end()
}
http.createServer(onRequest).listen(8888)
}
exports.myRoute = myRoute

//创建index.js文件

var server = require(’./server’)
var router = require(’./router’)

server.myRoute(router.route)

启动node服务
$ node index.js

7,node.js的全局对象

javascript中的全局对象是window
node.js中的全局对象是dlobal,所有全局变量都是global对象的属性
例子:

//创建main.js文件
_filename //文件所在位置的绝对路径
console.log(_filename)
$ node main.js // web/com/xxx/main.js

其余属性:_dirname 脚本所在目录 settimeout/cleartimeout/setinterval/console/process等等

8,node.js常用工具

//util是node.js的核心模块,提供常用函数的集合
//使用的时候先require

var util = require(‘util’)

相关属性
util.inherits //对象间原型的继承
util.inspect //任意对象转换为字符串

9,node.js文件系统(fs)

//创建input.txt文件
这是测试文件系统的文件

//创建file.js文件

var fs = require(‘fs’)
//异步读取
fs.readFile(‘input.txt’,function(err,data){
if(err){
return console.log(err)
}
console.log(‘异步读取数据’ + data.toString())
})

//同步读取
var data = fs.readFileSync(‘input.txt’)
console.log(‘同步读取’ + data.toString())

执行node
$ node file.js

10,node.js的get/post请求

get被嵌入在url路径中,url模块的parse函数获取参数

var http = require(‘http’)
var url = require(‘url’)
var util = require(‘util’)

http.createServer(function(req,res){
res.writeHead(200,{‘content-type’:‘text/plain;charset=utf-8’});
// var params = url.parse(req.url,true).query
// res.write(‘网站名:’ + params.name)
res.end(util.inspect(url.parse(req.url,true)))
}).listen

post请求的内容全部都在请求体中

var http = require(‘http’)
var queryString = require(‘queryString’)
var util = require(‘util’)
http.createServer(fuhnction(req,res){
// 定义了post变量,用于暂存请求体的信息
var post = ‘’
// 通过req的data事件监听函数,每当接受到请求体的数据,就累加到post变量中
req.on(‘data’,function(chunk){
post += chunk
})
// 在end事件触发后,通过queryString.parse将post解析为真正的post请求格式,然后向客户端返回
req.on(‘end’,function(){
post = queryString.parse(post)
res.end(util.inspect(post))
})
}).listen(3000)

11,node创建web服务

// 创建server.js文件

var http =require(‘http’)
var fs = require(‘fs’)
var url = require(‘url’)

//创建服务器
http.createServer(function(request,response){
//解析请求,包括文件名
var pathName = url.parse(request.url).pathName
//从文件系统中读取请求的内容
fs.readFile(pathName.subStr(1),function(err,data)){
if(err){
console.log(err)
response.writeHead(404,{‘content-type’:‘text/plain’})
}else{
response.writeHead(200,{‘content-type’:‘text/plain’})
// 响应文件内容
response.write(data.toString())
}
// 发送响应请求
response.end()
})
}).listen(8080)

$ node server.js
server running at http://127.0.0.1:8080

node创建web客户端

// 创建client.js文件
var http = require(‘http’)
// 用于请求的选项
var options = {
host: ‘localhost’,
port: ‘8080’,
path: ‘/index.html’
}
// 处理响应的回调函数
var callback = function(response){
//不断更新数据
var body = ‘’
response.on(‘data’,function(data){
body += data
})

response.on('end',function(){
  // 数据接收完成
  console.log(body)
})

}
// 向服务端发送请求
var req = http.request(options,callback)
req.end()

$ node client.js

12,node的express框架

Express 框架核心特性:

1,可以设置中间件来响应 HTTP 请求
2,定义了路由表用于执行不同的 HTTP 请求动作
3,可以通过向模板传递参数来动态渲染 HTML 页面

*body-parser - node.js 中间件,用于处理 JSON, Raw, Text 和 URL 编码的数据
*cookie-parser - 这就是一个解析Cookie的工具。通过req.cookies可以取到传过来的cookie,并把它们转成对象
*multer - node.js 中间件,用于处理 enctype=“multipart/form-data”(设置表单的MIME编码)的表单数据

当使用中间件的时候都需要app.use一下

例子:Express框架输出‘hello world’

// 创建express_demo.js文件
var express = require(‘express’)
var app = express()

app.get(’/页面名称’,function(req,res){
res.send(‘hello world’)
})

var server = app.listen(8081,function(){
var host = server.address().address
var port = server.address().port
console.log(‘访问地址为http://%s:%s’,host,port)
})

$ node express_demo.js
访问地址为http://xxxxxxxx:8081
浏览器中访问地址,窗口会看见 hello world

13,静态文件

express提供了内置的中间件express.static来设置静态文件,如:图片,css,javascript
可以使用中间件express.static来设置静态文件路径

app.use(’/public’, express.static(‘public’))

14,cookie管理

// 创建cookie.js文件

var express = require(‘express’)
var cookieParser = require(‘cookie-parser’)
var util = require(‘util’)
var app = express()
// 每当使用中间件的时候都需要app.use一下
app.use(cookieParser())
app.get(’/’,function(req,res){
console.log(‘cookie:’ + util.inspect(req.cookie))
})
app.listen(8081)

$ node express.js

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值