nodejs初始
那么在介绍nodejs之前,大家是否对JavaScript有定义呢?
一、什么是JavaScript?
接触过前端的朋友都知道,javascript是一门运行在浏览器端的脚本语言,用来做客户端页面的交互。
二、JavaScript的运行环境呢?
三、浏览器中的javascript可以做什么?
(1)操作dom(也就是对dom的增删改,注册事件之类的事情)
(2)发送AJAX请求/跨域
(3)BOM交互如给我们提供页面跳转,历史记录,控制台打印日志
(4)ecmascript(js的核心语言,如用来定义变量,函数等)
四、浏览器端的javasscript不可以做什么?
(1)涉及到端对端的应用程序,我们需要操作文件,浏览器中的javascript是不能进行文件操作的,虽然h5里面提供了关于文件相关的API,但是这些API大多数只限于只读的层面 ,不能像传统的语言如java,通过传一个路径,然后将对应的文件读出来,说白了就是不能进行文件和文件夹的CURD.
(2)浏览器端的javascript也没有办法去操作操作系统,如获取操作系统的版本之类的。
解释:
五、javascrip只能运行在浏览器端吗?
前端开发人员都知道,javascrip是有ecmascrip语言,BOM,DOM组成的,在语言层面,她只是给我们提供一些操作语法,如定义变量,函数,类型,流程控制等的操作。而BOM,DOM是浏览器提供的,并非es提供的。因此我们常提及的js其实就是es,js的大部分功能(DOm,BOM(浏览器开放出来的API)等的操作)都是由 浏览器的执行引擎决定的 ,这也衍生出一个观点,任何一门编程语言 ,他的能力不是由语言本身决定的,而是由他的执行环境决定的。比如说java,他即是一门语言也是一个平台,对于javascript来说语言就是es,平台是浏览器。那么js只能运行在浏览器中吗?非也!对于大多数语言,都是运行 在一个平台上的,比如java只运行在虚拟机上,但是也有运行在多个平台的语言, java在一定层面上来讲是没有必要运行在多个平台上的,因为虚拟机是跨平台(也就是跨操作系统如window,linux等)的。js同样是可以运行在多个平台的,浏览器之所以能过运行js,是因为他由js的执行引擎。js同样,只要由支持他的平台就可以执行。因此说要想语言有很强大的功能,只需要提供强大的平台,node就是这样一个平台,能够执行js,那么node到底是什么东西?接下来简述node是个什么鬼六、什么是modejs
打开Nodejs英文网:https://nodejs.org/en/
我们会发现这样一句话:
翻译成中文如下:
- Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。
- Node.js 使用了一个事件驱动、非阻塞式 I/O 的模型,使其轻量又高效。
- Node.js 的包管理器 npm,是全球最大的开源库生态系统。
七、node详见
根据官方文档可以知道,node就是一个给予谷歌v8引擎的一个javascript的运行时,可以理解为运行js的一个虚拟机。他使用的是一个 事件驱动,非阻塞I/O模型 ,他是将js的运行环境搬到了服务器端,和客户端没有一点关系。是一个纯服务端的东西,node只是为js提供了一个平台。node里面其实还分了两块,一是封装了v8引擎,目的是为了执行es(如定义变量,定义函数等),另外一个提供了大量的工具库,是帮助node实现各种功能的,提供了一些以前js的环境办不到的事情,比如文件操作,网络操作,操作系统的操作。
既然node是一个平台(所谓的平台就是用来运行特定语言的),也就意味着node是用来运行语言的,那么java也是语言,node能运行java吗?据nodejs创始人Ryan Dahl回忆,他最初是选择了Ruby这门语言,但是Ruby这门语言的虚拟机效率不怎么样最终放弃了,按照这种思路,貌似node将java的虚拟机集成进来应该可以运行java,但node作者最终选择了javascript。这样js就实现了在服务端运行的可能,js运行在node平台上(分为v8部分,用来执行es,和大量的工具库组件(API)称之为libuv,提供了以前js的环境办不到的事,如文件操作,网络操作等等)。
知道了什么是node,应该还要清楚node在web中有什么用途?
(1)node可以接受客户端用户的所有请求,并且能够快速的给出响应,因此node可以用来做网站。
(2)node可以作为一个中间层来来分发调用数据接口,比如有一个网站数据是有java提供的,我们可以让node作为一个中间曾,来接受用户的请求,然后通过node来调用java数据接口,获取到数据后直接在node层面做html的瓶装,然后将渲染好的页面直接给用户。为什么要这样做,直接请求java接口不行吗,这是因为node被称之为高性能的web服务器,在并发和抗压方面都比传统的平台要好很多,因此这样一包装可以极大的减轻服务器的开发。
通过上面的两点,可以总结出,node在web中要么从前端页面到后端服务全包了。
总结:
node就是一个javascript的运行环境(平台),他不是一门语言,也不是javascript的框架。可以用来开发服务端应用程序,web系统。其特点是体积小,快速,高性能。
它是可以运行JavaScript的服务平台,可以吧它当做一门后端程序,只是它的开发语言是JavaScript
八、node.js的特性
- 非阻塞IO模型 - 时间驱动
九、运用的场景
- 高并发低业务 - 实时场景 - 聊天、电子商务、视频直播等
十、安装地址
http://nodejs.cn/
判断是否安装成功 node -v
进入编辑状态:node+回车,可以进行一些运算
退出编辑模式:ctrl+d或者ctrl+c两次
十一、模板化开发
stu.js
var man="海燕"; module.exports = man; //对外开放接口 console.log(man);
stu2.js
var temps = require("./stu.js"); //引用文件,在js文件中加个./代表是同级目录 console.log(temps);
那么如何执行文件呢? node b.js =====》node 文件名
十二、用node.js简单的做一个登录
login.html
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width"> <title>Title</title> <script src="jquery.js"></script> <style> span{ color: red; } </style> </head> <body> <div> <form action="" method="post"> <p>用户名:<input type="text" placeholder="username" id="username"></p> <p>密码:<input type="password" placeholder="password" id="password"></p> <input type="submit" value="提交" onclick="login()"> <span></span> </form> </div> <script> function login() { var username = $("#username").val(); var password = $("#password").val(); var url = "http://localhost:8080/login"; console.log(username,password); $.post(url, {username,password}, function (response) { console.log(response); if (response){ $("span").html("登陆成功") }else{ $("span").html("登录失败") } }) } </script> </body> </html>
server.js
var express = require("express"); //引用包 var query = require("querystring"); var app = express(); //初始化 app.listen("8080",function () { //监听 console.log("服务已经启动,端口是8080") }); var data2=""; app.post( '/login', function (request,response) { response.header("Access-Control-Allow-Origin", "*"); request.on("data",function (datas) { //接收用户发来的数据,里面的data是不变的,就得叫data data2 = ""; // console.log(datas) ; //<Buffer 75 73 65 72 6e 61 6d 65 3d 26 70 61 73 73 77 6f 72 64 3d // >这样打印的结果是Buffer 类型的,所以我们得拼接一下,用querystring这个模块转成字符串 data2+=datas; }); request.on("end",function () { //接收用户发来的数据之后开始解析 console.log(query.parse(data2)); //{ username: '海燕', password: '123' } var username = query.parse(data2).username; var password = query.parse(data2).password; if (username == "海燕" && password == "123"){ response.send(true)//如果登录成功就把数据返回给前端 }else{ response.send(false) } }) } );