IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> Day04 -> 正文阅读

[JavaScript知识库]Day04

今日学习

NodeJS基础

收获

1.什么是NodeJS?

在NodeJS的官网中给出了这样的定义:Node.js 是一个基于 Chrome V8 引擎的 Javascript 运行环境。

所以说 Node.js 不是库,是一个运行环境,或者说是一个 JS 语言解释器。尽管他看起来像是js库,但是实际上并不是,但是他却与js有着深刻的渊源,这就不得不提到它在前端与后端的应用了。

传统上 Web 开发者,前端用 JS 写,但是写服务器端代码的时候还必须用另外一种语言,类似 Ruby/Java/PHP 等。但是 Node.js 出现之后,JS 前后通吃了。如果去网上搜 Node.js 的资料,很多都是用 Node.js 去写服务器代码的。

但是,Node.js 今天也成为了 Web 前端开发必不可少的基础设施。注意,Web 前端的 JS 代码最终还是运行在浏览器中的,所以运行的时候,或者说在产品环境下,不依赖于 Node.js 。但是,Node.js 诞生以后,前端大爆发,类似 React/Vuejs 这样的前端框架的开发环境变得非常强大和负责,Node.js 是这些开发环境运行的基础。——摘自知乎

?2.运用NodeJS实现JS在非浏览器中运行

以往JS代码只能在浏览器中运行,但是NodeJS可以做到让你在哪怕是记事本中也能运行JS代码,下面是运用cmd窗口运行JS代码的一个示例(node启动运行环境,Ctrl+D退出运行环境)

?

?但是更为常见的方式是建立.js文件,然后在命令行执行,如在app.js中输入

console.log("hello");

再在命令行中(要进入到js文件储存的目录下)

?

?3.npm简介

转载:我们为什么要使用npm?

?由于NodeJS在前后端的应用之广,再加上JS的开发者众多,提供了相当多的开源代码,这就组成了npm这个软件包仓库。在NodeJS安装的时候已经自动安装了一些包,npm 是 Node Package Manager 的缩写,意思是 Node 的包管理系统。我们要实现各种功能几乎都能找到现成的别人写好的包,直接拿了用就好了。

如果需要下载某个包,执行:

npm install [yourPackageName]

4.使用NodeJS编写第一个应用

首先,NodeJS的应用由三个部分构成:

  1. ?required 模块:在这里,我们可以使用?require?指令来载入 Node.js 模块。

  2. 创建服务器:服务器可以监听客户端的请求,类似于 Apache 、Nginx 等 HTTP 服务器。

  3. 接收请求与响应请:?服务器很容易创建,客户端可以使用浏览器或终端发送 HTTP 请求,服务器接收请求后返回响应数据。

示例(创建一个.js文件即可):

步骤一:引入模块(这里以引入http模块为例):

var http = require("http");
//使用require指令来载入http模块,并将实例化的 HTTP 赋值给变量 http

步骤二:创建服务器:

http.createServer(function (request, response) {  //createServer是创建服务器方法
                                //request与response是两个参数,用于接收与响应数据

    // 发送 HTTP 头部 
    // HTTP 状态值: 200 : OK
    // 内容类型: text/plain
    response.writeHead(200, {'Content-Type': 'text/plain'});

    // 发送响应数据 "Hello World"
    response.end('Hello World\n');
}).listen(8888);              //listen为绑定端口(这里绑定端口8888)

// 终端打印如下信息
console.log('Server running at http://127.0.0.1:8888/');

在cmd窗口执行:

node myNodeJS.js

再在浏览器中输入cmd窗口打印出的http://127.0.0.1:8888/

?

?5.Node.js REPL(交互式解释器)

前面我们直接在cmd窗口先输入node,然后就能直接写js代码,这是因为NodeJS自带了交互式解释器(REPL),让我们可以在终端中输入命令,并接收系统的响应。

它可以执行如下任务:

  1. 读取?- 读取用户输入,解析输入的 Javascript 数据结构并存储在内存中。

  2. 执行?- 执行输入的数据结构

  3. 打印?- 输出结果

  4. 循环?- 循环操作以上步骤直到用户两次按下?ctrl-c?按钮退出。(也可以直接ctrl-d

6.package.json介绍

package.json?文件至少要有两部分内容:

  1. “name”
    • 全部小写,没有空格,可以使用下划线或者横线
  2. “version”
    • x.x.x 的格式
    • 符合“语义化版本规则”,它是一种旨在使管理依赖项更加容易的软件版本控制的行业标准。 在 npm 上发布的库、框架或其它工具都应该使用语义化版本,以便让用户清晰地知道如果项目升级将带来哪些改变。
      "package": "MAJOR.MINOR.PATCH"
      如:2.10.2
      可以加上~表示接收补丁版本的更新(最新版本)
      如:~2.10.2 -> 2.10.9(假设最新版为2.10.9)
      可以加上^表示接受小版本的更新(最新版本)
      如:^2.10.2 -> 2.11.1(假设最新版为2.11.1)

其他内容:

description:描述信息,有助于搜索
keywords:关键字,有助于在人们使用 npm search 搜索时发现你的项目
author:作者信息
license:告知用户允许他们拿这个项目干什么,默认是 MIT

dependencies:项目的依赖包,具有如下格式:

?

?7.回调函数

Node.js 异步编程的直接体现就是回调。

回调函数在完成任务后就会被调用,Node 使用了大量的回调函数,Node 所有 API 都支持回调函数。

例如,我们可以一边读取文件,一边执行其他命令,在文件读取完成后,我们将文件内容作为回调函数的参数返回。这样在执行代码时就没有阻塞或等待文件 I/O 操作。这就大大提高了 Node.js 的性能,可以处理大量的并发请求。

回调函数一般作为函数的最后一个参数出现:

fucntion fun(value1,value2,callback){

}

观察这两个代码和他们运行结果的不同:

var fs = require("fs");

var data = fs.readFileSync('input.txt');

console.log(data.toString());
console.log("程序执行结束!");

那么它的运行结果一定是:

?

?这是因为运行是单线程的,所有代码一定要等到上一步的代码完成后才继续运行。

var fs = require("fs");

fs.readFile('input.txt', function (err, data) {   //注意这里的回调函数写法,将一个函数作为参数
    if (err) return console.error(err);
    console.log(data.toString());
});

console.log("程序执行结束!");

那么它的运行结果为:

?

第二个代码实现了让们不需要等待文件读取完,也能继续运行代码,所以先输出了程序执行结束字符串。

因此,第一种情况我们称之为阻塞,而第二种情况我们称之为非阻塞。阻塞是按顺序执行的,而非阻塞是不需要按顺序的,所以如果需要处理回调函数的参数,我们就需要写在回调函数内。

8.express框架

Express 简介

Express 是一个简洁而灵活的 node.js Web应用框架, 提供了一系列强大特性帮助你创建各种 Web 应用,和丰富的 HTTP 工具。

使用 Express 可以快速地搭建一个完整功能的网站。

Express 框架核心特性:

  • 可以设置中间件来响应 HTTP 请求。

  • 定义了路由表用于执行不同的 HTTP 请求动作。

  • 可以通过向模板传递参数来动态渲染 HTML 页面。? ?——菜鸟教程

安装express框架(在当前目录下安装)

npm install express --save

?安装express框架时需要同时几个模块:

npm install body-parser --save
//body-parser - node.js 中间件,用于处理 JSON, Raw, Text 和 URL 编码的数据。
npm install cookie-parser --save
//cookie-parser - 这就是一个解析Cookie的工具。通过req.cookies可以取到传过来的cookie,并把它们转成对象。
npm install multer --save
//multer - node.js 中间件,用于处理 enctype="multipart/form-data"(设置表单的MIME编码)的表单数据。

?安装完成后可以使用如下命令查看版本号:

npm list express

?

?一个helloworld的express代码:

//express_demo.js 文件
var express = require('express');
var app = express();
 
app.get('/', function (req, res) {
   res.send('Hello World');
})
 
var server = app.listen(8081, function () {
 
  var host = server.address().address
  var port = server.address().port
 
  console.log("应用实例,访问地址为 http://%s:%s", host, port)
 
})

express框架与node(fcc刷题)

要使用express框架,首先我们要创建一个express对象:

var express = require('express');
var app = express();

在 Express 中,路由采用这种结构:app.METHOD(PATH, HANDLER), METHOD 是 http 请求方法的小写形式, PATH 是服务器上的相对路径(它可以是一个字符串,甚至可以是正则表达式), HANDLER 是匹配路由时 Express 调用的函数, 处理函数采用这种形式:function(req, res) {...},其中 req 是请求对象,res 是响应对象,如:

app.get('/',function(req, res) {
  res.send('SUCCESS');  
})
//当请求跟路由('/')时,会响应字符串SUCCESS(res.senc("SUCCESS"))

我们可以使用res.sendFile(path)方法来响应一个文件。你可以把响应一个文件的方法放到路由处理程序中:app.get('/', ...)。在后台,这个方法会根据你想发送的文件的类型,设置适当的 headers 头信息来告诉浏览器如何处理它。然后它会读取并发送文件。此方法需要文件的绝对路径。可以使用 Node.js 的全局变量__dirname来计算出这个文件的绝对路径。

var absolutePath = __dirname + relativePath/file.ext

app.get("/", function(req, res) {
  var absolutePath = __dirname + "/views/index.html";
  // 将会发送文件 /views/index.html 作为 / 的 GET 请求的响应
  res.sendFile(absolutePath);
});

HTML 服务器通常有一个或多个用户可以访问的目录。 你可以将应用程序所需的静态资源 (样式表、脚本、图片) 放在那里。

在 Express 中可以使用中间件?express.static(path)?来设置此功能,它的参数?path?就是包含静态资源文件的绝对路径。

如果你不知道什么是中间件……别担心,我们将在后面详细讨论。 其实,中间件就是一个拦截路由处理方法并在里面添加一些信息的函数。 使用?app.use(path, middlewareFunction)?方法来加载一个中间件, 它的第一个参数?path?是可选的, 如果没设置第一个参数,那么所有的请求都会经过这个中间件处理。

app.use("/public",express.static(__dirname + "/public"))
//使用 app.use() 为路径 /public 的请求安装 express.static() 中间件, 静态资源的绝对路径是 __dirname + /public

HTML 服务器提供 HTML 服务,而 API 提供数据服务。?REST(REpresentational State Transfer)API 允许以简单的方式进行数据交换,对于客户端不必要知道服务器的细节。 客户只需要知道资源在哪里(URL),以及想执行的动作(动词)。 GET 动词常被用来获取无需修改的信息。 如今,网络上的移动数据首选格式是 JSON, 简而言之,JSON 是一种可以方便地用字符串表示 JavaScript 对象的方式,因此它很容易传输。

我们来创建一个简单的 API,创建一个路径为?/json?且返回数据是 JSON 格式的路由, 可以像之前那样用?app.get()?方法来做。 然后在路由处理部分使用?res.json()?方法,并传入一个对象作为参数, 这个方法会结束请求响应循环(request-response loop),然后返回数据。 原来,一个有效的 JavaScript 对象会转化为字符串,然后会设置适当的消息头来告诉浏览器:“这是一个 JSON 数据”,最后将数据返回给客户端。 一个有效的对象通常是这种结构:{key: data},?data?可以是数字、字符串、嵌套对象或数组,?data?也可以是变量或者函数返回值,在这种情况下,它们先求值再转成字符串。

app.get("/json", function(req, res){
  var obj = {message: "Hello json"};
  res.json(obj);
})
//当向路由 /json 发送 GET 请求,将对象 {"message": "Hello json"} 以 JSON 格式返回给客户端, 浏览器访问 your-app-url/json 时,应该在屏幕上看到这个消息。

.env?文件是一个用于将环境变量传给应用程序的隐藏文件, 这是一个除了开发者之外没人可以访问的私密文件,它可以用来存储你想保密或者隐藏的数据, 例如,它可以存储第三方服务的 API 密钥或者数据库 URI, 也可以使用它来存储配置选项, 通过设置配置选项,你可以改变应用程序的行为,而无需重写一些代码。

在应用程序中可以通过?process.env.VAR_NAME?访问到环境变量。?process.env?对象是 Node 程序中的一个全局对象,可以给这个变量传字符串。 习惯上,变量名全部大写,单词之间用下划线分隔。?.env?是一个 shell 文件,因此不需要用给变量名和值加引号。 还有一点需要注意,当你给变量赋值时等号两侧不能有空格,例如:VAR_NAME=value。 通常来讲,每一个变量定义会独占一行。

添加一个环境变量作为配置选项。

在项目根目录创建一个?.env?文件,并存储变量?MESSAGE_STYLE=uppercase

当向?/json?发 GET 请求时,如果?process.env.MESSAGE_STYLE?的值为?uppercase,那么上一次挑战中的路由处理程序返回的对象的消息则应该大写。 响应对象应该是?{"message": "Hello json"}?or?{"message": "HELLO JSON"},取决于?MESSAGE_STYLE?的值。

app.get("/json", function(req, res){ 
  if(process.env.MESSAGE_STYLE.indexOf("uppercase") > -1){
     res.json({message: "Hello JSON"});
  }
  else {
     res.json({message: "Hello json"});
  }
});

暂时先刷到这里。。刷到裂开了QAQ

学习链接:菜鸟教程NodeJS

?

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2021-08-28 08:56:16  更:2021-08-28 08:57:16 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 13:08:45-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码