Nodejs之路(一)—— Nodejs入门
不知不觉,现在已经习惯学一点东西,就写博客记录一下。这次学习Nodejs主要是在B站上看的视频教程,感觉讲的很是不错,所以我想把在看视频学习过程中的一些重要知识点记录下来方便以后自己快速查阅。
-----注:这系列博客记录的知识点主要来源于黑马程序员的Nodejs视频教程,博主只是简单手动进行了代码复现和知识点记录,侵删
一.Node是什么?
1.Node.js是一个JavaScript运行时环境(可以解析和执行JavaScript代码)
2.现在的JavaScript可以完全脱离浏览器来运行,一切都归功于Node.js
3.浏览器中的JavaScript包括EcmaScript、BOM、DOM
4.Node.js中的JavaScript :没有BOM、DOM,用EcmaScript进行编码,主要是在Node这个JavaScript执行环境中为JavaScript提供一些服务器级别的API操作(例如文件读写、网络服务的构建、网络通信、http服务器等处理)
5.Node.js特性是 使用事件驱动、非阻塞IO模型(异步),使得其轻量和高效
6.npm是基于Node.js开发出来的包管理工具,npm是世界上最大的开源库生态系统,绝大多数js相关的包都存放在npm上,方便开发人员下载使用
7.Google Chrome的V8引擎是目前公认的解析执行JavaScript代码最快的,Node.js构建在Google Chrome的V8引擎之上,是一个独立的JavaScript运行时环境
8.Node.js能做的事:Web服务器后台、命令行工具(npm、git、hexo)
二.使用Node执行js脚本文件
1.创建编写JavaScript脚本文件
2.打开终端,定位到脚本文件所属目录
3.输入 node 文件名
来执行对应的脚本文件
注:①命令dir是用来显示文件或目录的命令 ②文件名不要用 node.js
来命名,最好也不要使用中文命名 ③浏览器端口默认为80
三.使用Node创建简单的http服务
//在 Node 中专门提供了一个核心模块:http,可以非常轻松的构建一个web服务器
//1.加载http核心模块
var http = require('http')
//2.使用http.createServer()方法创建一个Web服务器,返回一个Server实例
var server = http.createServer()
//3.接收请求、处理请求、给个反馈(发送相应)
//当客户端请求过来,就会自动触发服务器的request请求事件,然后执行第二个参数:回调处理
server.on('request',function(){
console.log('收到客户端的请求了')
})
// 4.绑定端口号,启动服务器
server.listen(3000,function(){
console.log('服务器启动成功了,可以通过 http://127.0.0.1:3000/ 来进行访问')
})
打开终端,定位到脚本文件所属目录,输入命令 node 文件名 ,显示如下:
浏览器输入 http://127.0.0.1:3000/ 后,命令行界面显示如下:
注: Node.js构建在Google Chrome的V8引擎之上,是一个独立的JavaScript运行时环境,可以脱离浏览器运行
四.响应内容类型Content-type
var http = require('http')
var server = http.createServer()
server.on('request',function(req,res){
//在服务端默认发送的数据其实是utf-8编码的内容
//但是浏览器不知道你是utf-8编码的内容,在浏览器不知道服务器响应内容的编码的情况下会按照当前操作系统的默认编码去解析
//中文操作系统默认是gbk
//要让浏览器显示的数据不是乱码的,就需要告诉浏览器服务器发给它的内容是什么编码的,下面这行代码就可以解决这个问题
var url = req.url
if(url === '/plain'){
// text/plain 就是普通文本 text/plain的意思是将文件设置为纯文本的形式,浏览器在获取到这种文件时并不会对其进行处理
res.setHeader('Content-Type','text/plain; charset=utf-8')
res.end('hello 世界')
}else if(url === '/html'){
// text/html的意思是将文件的content-type设置为text/html的形式,浏览器在获取到这种文件时会自动调用html的解析器对文件进行相应的处理
// 如果你发送的是 html 格式的字符串,则也要告诉浏览器我给你发送的是 text/html 格式的内容
res.setHeader('Content-Type','text/html; charset=utf-8')
res.end('<p>hello html <a href="">点我</a></p>')
}
})
server.listen(3000,function(){
console.log('Server is running.....,可以通过 http://127.0.0.1:3000/ 来进行访问')
})
五.通过hhtp网络发送文件
发送的并不是文件,本质上发送的是文件的内容
当浏览器收到服务器响应内容之后,就会根据你的 Content-Type 进行对应的解析处理
服务器最好把每次响应的数据是什么内容类型都告诉客户端,而且要正确的告诉
不同资源对应的 Content-Type 是不一样的,具体参照:http://tool.oschina.net/commons
对于文本类型的数据,最好都加上编码,目的是为了防止中文解析乱码问题
//1.结合fs发送文件中的数据
//2.Content-Type 不同的资源对应的 Content-Type 是不一样的,图片不需要指定编码,一般只为字符数据指定编码
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{
//data默认是二进制数据,可以通过 .toString 转为咱们能识别的字符串
//res.end()支持两种数据类型,一种是二进制,一种是字符串
res.setHeader('Conten-Type','text/html; charset=utf-8')
res.end(data)
}
})
}else if(url==='/baby'){
//url:统一资源定位符
//一个 url 最终其实是要对应到一个资源的
fs.readFile('./resource/ab2.jpg',function(err,data){
if(err){
//告诉客户端,读取失败
res.setHeader('Content-Type','text/plain; charset=utf-8')
res.end('文件读取失败,请稍后重试!')
}else{
//data默认是二进制数据,可以通过 .toString 转为咱们能识别的字符串(因为res.end也支持二进制的数据类型,所以这里也可以不用转)
//res.end()支持两种数据类型,一种是二进制,一种是字符串
//图片就不需要指定编码了,因为我们常说的编码指的是字符编码
res.setHeader('Conten-Type','image/jpeg')
res.end(data)
}
})
}
})
server.listen(3000,function(){
console.log('Server is running......')
})
六.ip地址和端口号
1.所有联网的程序都需要进行网络通信。一台计算机只有一个物理网卡,而且同一个局域网中,网卡的ip地址必须是唯一的(网卡是通过唯一的ip地址来进行定位的)。
2.DNS: 域名系统(英文:Domain Name System,缩写:DNS)是互联网的一项服务,是万维网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。
3.①ip地址用来定位计算机 ②端口号用来定位具体的应用程序(所有需要联网通信的应用程序都必须占用一个端口号)
4.端口号的范围从0~65536之间
5.在计算机中有一些默认端口号,最好不要去使用(例如http服务的80)
6.在开发过程中使用一些简单好记的就可以了,例如3000、5000等没什么含义
7.浏览器默认使用的端口号是80,若要请求其他端口号,则一定要在ip地址后面给出来
8.可以同时开启多个服务,但一定要确保不同服务占用的端口号不一致才可以。说白了,在一台计算机中,同一个端口号同一时间只能被一个程序占用
七.一些知识点补充
1.hhtp服务的响应内容(res.end())只能是二进制数据或者字符串(注意:数字、对象、数组、布尔值都是不可以的)
2.JSON.stringify() 方法将 JavaScript 对象或数组转换为字符串。JSON.parse() 方法将字符串数据转换为 JavaScript 对象或数组。
3.Node为JavaScript提供了很多服务器级别的API,这些API绝大多数都被包装到了一个具名的核心模块中。例如文件操作的fs
核心模块,http服务构建的http
模块,path
路径操作模块、os
操作系统信息模块。以后如果说一个模块是核心模块,就要想到如果要使用它,就必须require,例如:
var fs = require('fs')
var http = require('http')
4.require 是一个方法,它的作用是用来加载模块的。在Node中,模块有两种:一是具名的核心模块,例如 fs、http;二是用户自己编写的文件模块(说白了就是js文件)。require加载用户自定义的模块时,require中的相对路径的 ./ 不能省略,否则会报错。补:后缀名也可以省略,require默认找的就是 .js 结尾的文件
5.在Node中,没有全局作用域,只有模块作用域(外部访问不到内部,内部也访问不到外部)
6.require 方法有两个作用:①加载文件模块并执行里面的代码②拿到被加载文件模块导出的接口对象(每个文件模块中都提供了一个对象---export,export默认是一个空对象,所有需要被外部访问的成员都需要挂载到exports这个对象中!)
例如:
a.js如下:
var ret = require('./b')
console.log(ret.foo)
console.log(ret.add(10,30))
b.js如下:
var foo = 'bbb'
exports.foo = "hello"
exports.add = function(x,y){
return x+y
}
命令行输入 node a.js 后,结果如下:
Nodejs之路(一)—— Nodejs入门的更多相关文章
- nodejs之路-[0]安装及简易配置
题外话: 之前写过ubuntu下编译nodejs- 传送门:Ubuntu15.04编译安装nodejsV0.12.3 只是如今基本在win下做开发了-. 就以这篇帖子为开头,作为我踏上nodejs之路 ...
- Nodejs ORM框架Sequelize快速入门
Nodejs ORM框架Sequelize快速入门 什么是ORM? 简单的讲就是对SQL查询语句的封装,让我们可以用OOP的方式操作数据库,优雅的生成安全.可维护的SQL代码.直观上,是一种Model ...
- nodejs学习笔记一——nodejs安装
a.nodejs安装 nodejs的安装没有什么说的默认安装即可.安装包官网下载即可:nodejs官网 本人用的是window的安装包node-v4.2.6-x64.msi 安装完成后打开命令行查看使 ...
- nodeJs学习过程之认识nodejs
nodeJs只是听说过,没见过,没玩过.从新手开始,我想慢慢掌握它. 一.首先,我想知道nodeJs是什么? 摘自百度百科: Node.js是一套用来编写高性能网络服务器的JavaScript工具包, ...
- 使用Termux,在手机上做nodejs编程,运行nodejs程序。
如果你是一名nodejs开发者,是否想过以下问题:在手机上运行nodejs程序?用手机当nodejs服务器?在手机上做nodejs编程?YES!使用Termux,以上都可以做到! 下面展示如何实现这个 ...
- Nodejs之路(二)—— Nodejs再入门
一.在Node中使用模板引擎 js代码: // art-template不仅可以在浏览器使用,也可以在node中使用 // 1.安装 npm install art-temlate模板引擎 // 2. ...
- 【NodeJS 学习笔记02】入门资源很重要
前言 在我映像中,异步最早出现与ajax,当时我还在搞.net,然后.net居然出了一个异步的控件...... 虽然我最后知道了他不是异步的......然后,前端异步用得特别多,如果不是异步的程序,你 ...
- 02 nodejs命令参数(NodeJS基础入门)
声明:本文章可供有一定js基础的朋友参考nodejs入门,本文未讲解nodejs的安装,如有需要的同学可以加QQ3382260752找我,进行交流学习. 建议使用开发软件:webstorm或hbuil ...
- NodeJS学习笔记 进阶 (13)Nodejs进阶:5分钟入门非对称加密用法
个人总结:读完这篇文章需要5分钟,这篇文章讲解了Node.js非对称加密算法的实现. 摘录自网络 地址: https://github.com/chyingp/nodejs-learning-guid ...
随机推荐
- POST提交数据之---Content-Type的理解
Content-Type是指http/https发送信息至服务器时的内容编码类型,contentType用于表明发送数据流的类型,服务器根据编码类型使用特定的解析方式,获取数据流中的数据. 在网络请求 ...
- layui实现已知被选中的option,怎样渲染
在项目中用到layui实现第几个option 实现,在select中渲染出需要展示的option 代码: $("#period option[value="+res.data.se ...
- PHP微信公众号支付弹出“NaN:undefined”解决方法
最近研究php微信支付开发,从微信官方下载了微信支付的demo后,测试时总是弹出NaN:Undefined这样的错误提示.不过这个并不影响支付的操作,支付成功后依然可以正常获取到支付状态,并进行跳转. ...
- Linux 指令查询帮助
man +指令名 例子: man rename
- Git连接远程服务器
连接方式: ssh -p 22 root@ip地扯 然后会提示你输入密码. 输入正确的密码后显示界面如下:
- oracle将查询结果横转纵
SELECT '残疾人|民政|综合治理|计划生育|物业监管|安全生产|环境类|司法信访|党建|社会组织|文化体育|社保' D , '53|52|51|50|49|48|47|5|4|3|2|1' g ...
- Sonatype Nexus Repository Manager清除无用的docker镜像
1.创建定时任务 2.先run一下看是否能删除无用镜像
- Git中.gitignore忽略规则
# 此为注释 – 将被 Git 忽略 *.a # 忽略所有 .a 结尾的文件 !lib.a # 但 lib.a 除外 /TODO # 仅仅忽略项目根目录下的 TODO 文件,不包括 subdir/TO ...
- h5判断是否为iphonex
js移动端页面判断是否是iphoneX 转自https://blog.csdn.net/weixin_39924326/article/details/80352929 function isIPho ...
- HTML基本案列
<html> <head> <!-- meta :告诉浏览器,如何翻译汉字 http-equiv :content-type 内容类型 详细内容有后面的值指定 conte ...