node.js基础
来源:互联网 发布:女性情趣用品 知乎 编辑:程序博客网 时间:2024/05/22 13:08
初学node.js,听说比php有潜力,而且社区很活跃,因此学一学,看看如何来进行与后端的交互。
1.栗子
const http = require('http');const hostname = '127.0.0.1';const port = 3000;const server = http.createServer((req, res) => { res.statusCode = 200; res.setHeader('Content-Type', 'text/plain'); res.end('Hello World\n');});server.listen(port, hostname, () => { console.log(`Server running at http://${hostname}:${port}/`);});
来看看官网的代码,创建了一个简易服务器。
req代表请求的一些信息,比如是get还是post,请求的URL等等。
res代表向请求发出响应,是失败还是成功。
监听端口,执行回调函数。
2.模块
就像java一样,为了避免变量名的复用,nodejs用模块来区分,模块通过require来引入,通过在各自模块中export来暴露方法。
student.js
function add(student){console.log('Add Student:'+student)}exports.add=add
teacher.js
function add(teacher){ console.log('Add Teacher:'+teacher)}exports.add=add
iclass.js
var student=require('./student')var teacher=require('./teacher')function add(teacherName,students){teacher.add(teacherName)students.forEach(function(item,index) {// body...student.add(item)})}exports.addone=add
index.js
var iclass=require('./iclass')// exports.add=function(classes) {// // body...// classes.forEach(function(item,index){// var _class=item// var teacherName=item.teacherName// var students=item.students// iclass.add(teacherName,students)// })// } iclass.addone('Scott',['白','美']
注意点:exports.本模块外部你想要调用此方法用的名字=本模块中的方法名;同时exports也可以匿名使用,就像上面注释所示。
3.url方法
测试parse解析url地址方法:
protocol是检测协议,slashes检测协议后有无双划线,host为ip地址或者是域名,port端口默认80,hostname主机名,hash对应页面锚点。
此外parse方法还可以接受其他参数(默认false),这里query从字符串变为了对象:
还可以在未知协议的情况下获取正确的path,需要加第三个参数,默认false下面是对比:
生成完整字符串的format方法:
需要传入一个已经被parse解析的对象。
最后是resolve方法,类似于python url包里的urladd方法,合并两个字符串生成正确完整地址:
4.querystring
上面提到了加一个参数true使得parse方法可以从querystring解析出query对象。
同时我们需要从query对象转换为所需要的querystring
首先是stringify方法,传入对象:
添加的第一个参数替换默认的‘&’,第二个参数替换默认的‘=’
其次是反序列化方法,将querystring转换为对象,与url里的不同在于,它传入的参数只是路径后面的内容:
同样当间隔不是默认的‘&’时,要传入该分隔符。
最后是转译方法,escape:
对英文不起作用,对符号与中文等有效。
5.改变上下文环境
看例子就知道了,将上下文从peopleA变为B:
var peopleA={name:'John',speak:function(iam){console.log(iam+this.name)}}peopleA.speak('i am ')peopleB={name:'whiersty'}peopleA.speak.call(peopleB,'you are ')
但是这种改变不太友好,意味着我们用一次就得另外写一句。
可以这样:
function peopleA(name){this.name=namethis.speak=function(){console.log(this.name)}}function peopleB(name){peopleA.call(this,name)}var pb=new peopleB('whiersty')pb.speak()
B继承A,并传入一个参数。
6.事件模块
事件的触发:
var EventEmitter=require('events').EventEmittervar life=new EventEmitter()life.on('trigger',function(data){console.log(data+'trigger被触发')})life.emit('trigger','oh ')
========================
http请求:
var http=require('http')var querystring=require('querystring')var postData=querystring.stringify({'content':'讲的很好,但是有些细节还有点懵','mid':8837})var options={hostname:'www.imooc.com',port:80,path:'/course/docomment',method:'POST',headers:{'Accept':'application/json, text/javascript, */*; q=0.01','Accept-Encoding':'gzip, deflate','Accept-Language':'zh-CN,zh;q=0.8','Connection':'keep-alive','Content-Length':postData.length,'Content-Type':'application/x-www-form-urlencoded; charset=UTF-8','Cookie':'imooc_uuid=f42fc314-16a9-48b6-95fa-611514f99e5f; imooc_isnew_ct=1472568015; loginstate=1; apsid=gzMmNlYTRlMmVhNGVhMDY2YWNlODc1MzhiZWQxNzcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMzkwOTA5MQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAxMTk2NDc1OTQ2QHFxLmNvbQAAAAAAAAAAAAAAAAAAADE0OTBjMWE3ZTdjZWQwMTk5NTBlZWMxY2RmYmFkYWEwZftkWGX7ZFg%3DYT; last_login_username=1196475946%40qq.com; PHPSESSID=9ot9fm0pmpf9mecpp7fa7ro4s1; IMCDNS=0; Hm_lvt_f0cfcccd7b1393990c78efdeebff3968=1483840894,1483929445,1484118913,1484185743; Hm_lpvt_f0cfcccd7b1393990c78efdeebff3968=1484223408; imooc_isnew=2; cvde=5876e090aa47c-109','DNT':1,'Host':'www.imooc.com','Origin':'http://www.imooc.com','Referer':'http://www.imooc.com/video/8837','User-Agent':'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.22 Safari/537.36 SE 2.X MetaSr 1.0','X-Requested-With':'XMLHttpRequest'}} var req=http.request(options,function(res){ //拿到返回值 res.on('end',function(){console.log('finish')})res.on('data',function(chunk){console.log(Buffer.isBuffer(chunk))console.log(typeof chunk)})console.log('status'+res.statusCode)console.log('headers'+JSON.stringify(res.headers)) //打印headersres.on('error',function(e){console.log('error:'+e.message)})}) req.write(postData) //将数据写入请求体,不写入不发出req.end()
0 0
- node.js基础语法
- 20150815 Node.js基础
- Node.js基础学习
- Node.js#0基础
- Node.js 基础命令
- Node.js基础1
- node.js基础学习
- node.js基础入门
- Node.js基础学习
- node.js基础
- Node.js基础学习
- Node.js基础
- node.js基础
- node.js 基础api
- 零基础学习node.js
- Node.js的基础内容
- node js 基础 创建模块
- Node.js Stream - 基础篇
- 如何提高英文的科研写作能力
- 类型推导之decltype
- 【DRP】——完结篇
- C++之命名空间
- JSON与AVRO数据文件的相互转换
- node.js基础
- 翻转课堂学习总结集—2015级
- lambda表达式
- redis在JAVA端的操作
- C/C++ OpenCV中值滤波&双边滤波
- eclipse中web项目中总有红叉叉显示js文件中有错误
- WebSocket
- 动画
- 移动端游戏架构设计