百度t7 教程 node 初步1
我少写了一篇学习笔记就是 模块化的源码 和Promise源码 和generator 生成器的源码
老师讲的是不错,可是我先放一放那个,因为那个似乎很难的样子, (逃避)
好了,这篇是node 最基础的部分,因为石川大神说, 后期会细致 讲 Node, 反正也就是 10 天后,我也不着急
学习的方式,一种是迭代式,一种是,一次性搞定, 我个人觉得还是迭代式好,不扯了,开始:
服务器端代码
index.js
//1 拿到http 网络模块
let http = require('http')
// 2得到一个服务器
let server = http.createServer(function(request,response){
// 4 , request response 感觉和 java 中 servlet 差不多!
// 其实就一样!
//当请求来临时,回调该方法,
// Node 搭建小型服务器,很轻松
console.log('connect success')
//向前台打印, hello node ,aciton is power!!
let msg = ' hello node ,aciton is power!!'
response.write(`我这里是测试es6 的模板字符串哈哈${msg}`)
response.end()
})
// 3监听 3000 端口
server.listen(3000)
在当前目录下,打开cmd , 运行 node index.js
浏览器访问
大家可以清晰的看到,从访问的请求,到内容的获取都走通过了!
在index.js 中,总共三步, 1, 加载网络模块 http 模块 2, 创建个小型服务器 3, 让服务器监听3000 端口(这里可随意
一般超过1024 )
端口的概念概念都懂吧,你连接一台电脑, 肯定要走特定的端口,想mysql 占据 3306, tomcat 8080 , localhost 80
啥ftp 21 还是22 ,我不知道,没用过,所以不清楚,反正不是21 就22
一旦有连接进来,index.js 中 就会走 对应的回调方法,将request 和 response 对象传递进去
在回调方法中,可以用
response.write('xxxx')
response.end();
来像浏览器输出内容信息, 我是说内容信息!
行吧,我们继续,现在我想 每当你访问时,我就根据你的访问去获取对应的文件,取出里面的内容给浏览器咋写呢?试试看!
let http = require('http')
let fs = require('fs')
// 2得到一个服务器
let server = http.createServer(function(request,response){
let url = request.url;
//console.log(url)
// url 显示是/xxxx
if(url==='/a'){
response.write('a')
}else if(url=='/b'){
response.write('b')
}
response.end();
})
// 3监听 3000 端口
server.listen(3000,function(){
console.log('监听端口成功.....')
})
当浏览器地址为 localhost:3000/a 时, 内容区会显示 a
当浏览器地址为localhost:3000/b 时,内容区会显示b
好,下面我们就继续改进了,在改进之前先去测试下,我们的fs 模块
现在修改如下:
let http = require('http')
let fs = require('fs')
// 2得到一个服务器
let server = http.createServer(function(request,response){
let url = request.url;
//console.log(url)
// url 显示是/xxxx
if(url==='/a'){
response.write('a')
// 在这里读取文件 1.txt
fs.readFile('file/1.txt',function(err,data){
if(err){
// 如果,有错误,则,发送一个 错误码!
response.writeHeader(404)
response.write('服务器端有错误')
response.end();
}else{
console.log(data)
let result = data.toString();
response.write(result)
response.end()
}
})
}else if(url=='/b'){
response.write('b')
}
response.end();
})
// 3监听 3000 端口
server.listen(3000,function(){
console.log('监听端口成功.....')
})
浏览器访问地址为: http://localhost:3000/a
结果只会显示 a
后台信息 是:
我主要想说的是,读取文件的操作也是异步的操作, 所以, 会先执行 response.end();
这点要明确! 读取文件非常简单,就是用 文件模块 fs
以上代码稍微改下就正常了:
let server = http.createServer(function(request,response){
let url = request.url;
//console.log(url)
// url 显示是/xxxx
if(url==='/a'){
response.write('a')
// 在这里读取文件 1.txt
fs.readFile('file/1.txt',function(err,data){
if(err){
// 如果,有错误,则,发送一个 错误码!
response.writeHeader(404)
response.write('服务器端有错误')
response.end();
}else{
console.log(data)
let result = data.toString();
response.write(result)
response.end()
}
})
}else if(url=='/b'){
response.write('b')
response.end()
}
})
response.end() 写在回到函数的里面, 行吧,读取文件
fs.readFile('file/1.txt',function(err,data){
if(err){
// 如果,有错误,则,发送一个 错误码!
response.writeHeader(404)
response.write('服务器端有错误')
response.end();
}else{
console.log(data)
let result = data.toString();
response.write(result)
response.end()
}
})
读取文件,fs.read(路径,回调函数)
其中回调函数,会 有两个参数, 一个err ,一个是data (二进制数据)
若读取正确,则err ==null data 不为空
data 是二进制数据,因为,有音频,视频, 流的操作都是二进制,这点和java 中的流概念一样,可见
语言之间都是相同的,只是语法不用罢了!
好下面就是测试 写入文件的操作了!
writeFile.js
let fs = require('fs')
fs.writeFile('file/2s.txt','这是我写入的数据,真的很牛叉',function(err){
if(err){
console.log('写入失败')
}else{
console.log('write Success')
}
});
运行起来
它会在对应的路径下,新建文件,并且把内容写进去!
也就是说 file/2s.txt ,你也可以写成 file/xxx.txt ,那么它就会新建 xxx.txt 文件
上一篇: js入门之基础计算api--splice的底层源码实现
下一篇: Java使用GUI完成UDP通信