Node.js 基础介绍(一)
Node.js 学习笔记一)
简单介绍——名称
Node.js,平时听到有好几种叫法,node 、Node.js、nodejs ,但是比较正式的称呼还是“Node.js”,由于它是基于Google v8的JavaScript(JS)运行环境,所以一般就称之为“Node.js”。【Google的V8引擎——对js进行解释的解释器,在Node.js中对这个解释器进行封装】
Node.js 具体是什么?
个人理解的Node.js呢,它就是一个服务器端的JavaScript解释器。是一个基于Google v8 的JS运行环境,也可以说是供前端使用的后台语言;
怎么这么说呢,因为现在的前后端的差异越来越小了,作为前端人员,也需要了解一些后台的东西,这里的Node.js就是我们要学习的一门利用后台语言C++开发的一种基于Google v8的服务器端JS。
但是,虽说Node.js是用后端语言开发的,但是我们操作它并不用说还需要去学习另一门语言,操作的是它已经封装好的东西,Node.js它采用的是还ECMA的核心语法,所有ECMA定义的知识都可以在node.js使用;但Bom 和dom 不能在node.js使用;
Node.js是函数式编程;
Node.js 最牛逼的地方 ,其实就在于它对http服务器的封装
1、Nodejs
优点:轻量(因为是模块化开发)、高效
特点:
1、模块化
2、事件驱动【这里可以看成是“onRequest”事件】
3、IO异步操作(非阻塞)
可以简单的看一个实例:
1、不能使用的端口号:
MySQL 3306
默认端口号:80
Tomcat默认端口号:8080
2、数据走向
"use strict"
//1、引用模块
//【注意】常量初始化后就不可更改
const myhttp = require('http');//请求node.js自带的HTTP模块
const myfs = require("fs");//请求文件操作模块
//2、用createServer创建服务器
//回调函数的参数:1、请求对象 2、响应对象
//回调函数,调用http模块提供的函数createServer,这个函数会返回一个对象,这个对象有一个listen方法,这个方法有一个数值参数,用于指定这个http服务器监听的端口号
const myServer = myhttp.createServer(function (req, res) {
//req.url:返回请求的地址,即用户在端口号后面输入的地址
console.log(req.url);
console.log("客户端请求来了");//在客户端浏览器访问时执行创建服务器函数
req.url = req.url=="/"?"/index.html":req.url;
//这里的path 前面会自动加上你的当前的working directory,比如这里是:D:\node\node1
let path = "public" + req.url; //这里就变成了D:\node\node1\public\
let arr = req.url.split(".");
let str = arr[arr.length-1];//判断文件后缀名
if(str=="html"){
//readfile 读取文件 的3个参数:
//1、文件的位置 2、文件编码 3、文件回调函数(err:错误信息 data:文件的内容)
myfs.readFile(path,"utf-8",function(err,data){
//200,表示页面的状态码:响应成功;这句还可以解决乱码问题
//状态码:
// 404 :未找到资源
//302:缓存资源
//50x:服务器出错
//res.writeHeader(200, {"Content-Type": "text/plain;charset=utf-8"});
// res.write("<h1>hello world</h1>"); //这里的h1不会被解释,因为text/plain,如果要以HTML标签来解释,变成text/html,下面有相关例子;
res.writeHeader(200, {"Content-Type": "text/html;charset=utf-8"});
res.write(data);
res.end();//必须写响应结束,否则会一直响应下去
});
}else if(str=="js"){
myfs.readFile(path,"utf-8",function(err,data){
res.writeHeader(200, {"Content-Type": "text/javascript;charset=utf-8"}); res.write(data);
res.end(); });
}else if(str=="css"){
myfs.readFile(path,"utf-8",function(err,data){
res.writeHeader(200, {"Content-Type": "text/css;charset=utf-8"});
res.write(data);
res.end();
});
}else if(str=="jpg" || str=="png"){
myfs.readFile(path,function(err,data){
res.writeHeader(200, {"Content-Type": "image/"+str+";charset=utf-8"});
res.write(data);
res.end();
});
}else if(str=="woff" || str=="ttf"){
myfs.readFile(path,function(err,data){
res.writeHeader(200, {"Content-Type": "font/"+str+";charset=utf-8"});
res.write(data);
res.end();
});
}
});
//3、添加端口
myServer.listen(8888);
console.log("服务启动");
【程序说明:这个程序还可以封装一下,这个只是初版,还可以优化】
简单的优化后:
app2.js
"use strict" //使用严格模式
//引入模块
const myhttp = require("http");
const myfs = require("fs");
const myurl = require("url");
const fileR2 = require("./routes/fileRouter2.js");//这里一定要写到根目录去
//创建服务器,并监听
myhttp.createServer(function (req,res) {
fileR2.sendpage(req,res);
}).listen(8989);
fileRouter2.js
"use strict"
const fileC2 = require("../controller/fileControl2.js");
exports.sendpage = (req,res)=>{
fileC2.sendfile(req,res);
}
fileControl2.js
"use strict"
//引入模块
const myfs = require("fs");
const myurl = require("url");
exports.sendfile = (req,res)=> {
"use strict"
req.url = req.url=="/"?"/index.html":req.url;
let pname = myurl.parse(req.url).pathname; //获取纯文件的路径名【去掉文件名的多余部分】
let path = "public"+"\\page2"+pname; // 取路径
let arr = pname.split(".");//获取后缀名
let ext = arr[arr.length-1];
if(ext=="html" || ext=="htm"){
myfs.readFile(path,"utf-8",function(err,data) {//读取文件并且创建回调函数
res.writeHead(200,{"Content-Type" : "text/html;charset=utf-8"});
res.write(data);
res.end();
});
}else if(ext=="css"){
myfs.readFile(path,"utf-8",function(err,data) {//读取文件并且创建回调函数
res.writeHead(200,{"Content-Type" : "text/css;charset=utf-8"});
res.write(data);
res.end();
});
}else if(ext=="js"){
myfs.readFile(path,"utf-8",function(err,data) {//读取文件并且创建回调函数
res.writeHead(200,{"Content-Type" : "text/javascript;charset=utf-8"});
res.write(data);
res.end();
});
}else if(ext=="png" || ext=="jpg" || ext=="gif"){
myfs.readFile(path,function(err,data) {//读取文件并且创建回调函数
res.writeHead(200,{"Content-Type" : "image"+ext+";charset=utf-8"});
res.write(data);
res.end();
});
}else if(ext=="woff2" || ext=="ttf"){
myfs.readFile(path,"utf-8",function(err,data) {//读取文件并且创建回调函数
res.writeHead(200,{"Content-Type" : "font"+ext+";charset=utf-8"});
res.write(data);
res.end();
});
}
};
这样主程序App2.js 看起来就精简吧,相互之间的结构也更加清晰了
3、路由
【特别注意】nodejs的每一个文件都是私有的;
要设置为一个公开的接口才可以访问,可以用exports 或者module.exports设置公开接口:
exports.暴露出去的方法名=自己内部的方法名/直接写方法
【加上一个nodejs比较简单的:箭头函数】
普通函数:
Function func1 ( x,y ) {
函数体
}
等价于”箭头函数”
(x,y)=>{
函数体
}
nodejs 新人,欢迎指正
Node.js 基础介绍(一)的更多相关文章
- Node.js 基础介绍
什么是Node.js 官网介绍: Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine. Node.js us ...
- Node.js基础与实战
Node.js基础与实战 Node.jsJS高级进阶 NODE原理与解析 REPL交互环境 模块与NPM Buffer缓存区 fs文件操作 Stream流 TCP&UDP 异步编程 HTTP& ...
- Web3D编程入门总结——WebGL与Three.js基础介绍
/*在这里对这段时间学习的3D编程知识做个总结,以备再次出发.计划分成“webgl与three.js基础介绍”.“面向对象的基础3D场景框架编写”.“模型导入与简单3D游戏编写”三个部分,其他零散知识 ...
- Node.js简单介绍并实现一个简单的Web MVC框架
编号:1018时间:2016年6月13日16:06:41功能:Node.js简单介绍并实现一个简单的Web MVC框架URL :https://cnodejs.org/topic/4f16442cca ...
- node.js基础模块http、网页分析工具cherrio实现爬虫
node.js基础模块http.网页分析工具cherrio实现爬虫 一.前言 说是爬虫初探,其实并没有用到爬虫相关第三方类库,主要用了node.js基础模块http.网页分析工具cherri ...
- Node.js基础知识
Node.js入门 Node.js Node.js是一套用来编写高性能网络服务器的JavaScript工具包,一系列的变化由此开始.比较独特的是,Node.js会假设在POSIX环境下运行 ...
- NodeJs>------->>第三章:Node.js基础知识
第三章:Node.js基础知识 一:Node.js中的控制台 1:console.log.console.info 方法 console.log(" node app1.js 1> ...
- 10慕课网《进击Node.js基础(一)》初识promise
首先用最简单的方式实现一个动画效果 <!doctype> <html> <head> <title>Promise animation</titl ...
- 进击Node.js基础(二)
一.一个牛逼闪闪的知识点Promise npm install bluebird 二.Promise实例 ball.html <!doctype> <!DOCTYPE html> ...
随机推荐
- ThinkPHP配置文件的加载
分类: thinkphp(39) 版权声明:本文为博主原创文章,未经博主允许不得转载. 惯例配置->应用配置->模式配置->调试配置->状态配置->模块配置->扩展 ...
- asp.net -mvc框架复习(7)-基于MVC搭建用户登录项目框架
整体框架: 一.搭建Model层 1.添加通用数据访问类 2.添加实体类(封装和传递数据,和数据库中数据表对应) 3.添加数据访问类(通常和实体类同名,但是后缀名发生改变) 二.搭建控制器层Contr ...
- asp.net -mvc框架复习(5)-ASP.NET MVC中的视图简单使用
1.视图分类 ASPX视图(现在讲解) Razor视图(后面讲解) ASPX 视图: 2.@page指令 作用:页面的声明 要求:必须放在第一行,常用指令属性如下: 3.服务器端内嵌语法 小脚本:在A ...
- 【开发技术】java异常的捕获与抛出原则
在可能会出现exception的地方,要使用try-catch或者throws或者两者都要.我的判断依据是:如果对可能出现的exception不想被外部(方法的调用者)知道,就在方法内部try-cat ...
- bootstrap-multiselect 的简单使用,样式修改,动态创建option
1.bootstrap-multiselect 顾名思义基于bootstrap,bootstrap基于jquery,所以第一步,引入文件 bootstrap.css/ juery.js /bootst ...
- 【备忘】MVC5 布署在windows2008 IIS7.5 出现的问题解决
MVC5布署到 windows2008 IIS7.5上,发现打不开(404),估计是URL重定向有问题... 本地开发环境是,win8+vs2013,MVC5是vs2013安装好后自带的... 好像记 ...
- python_11_字符编码
什么是字符编码? --世界上有很多国家,每个国家都有自己独特的语言,所以在计算机普及的当今世界, 每个国家都有自己的字符编码,本国的软件运行在其他国家的机器上,会出现乱码, 有utf-8,gbk等各种 ...
- Intel DPDK 全面解读
高性能网络技术 随着云计算产业的异军突起,网络技术的不断创新,越来越多的网络设备基础架构逐步向基于通用处理器平台的架构方向融合,从传统的物理网络到虚拟网络,从扁平化的网络结构到基于 SDN 分层的网络 ...
- mysql5.7安装配置,常用命令,常见问题
1.安装配置 参考:http://www.cnblogs.com/Fiona20170420/p/6738185.html 1. 下载 2. 解压缩 3. 添加path环境变量,路径指向mysql所在 ...
- JDBC (二)
1 使用JDBC进行批处理 当需要向数据库发送一批SQL语句的时候,应该避免向数据库一条条的发送执行,而应该采用JDBC的批处理机制,以提高执行效率. 实现批处理的方式一: Statement.add ...