node.js说白了就是JavaScript。
node.js的性能是php的86倍(大概)。
在下载完后可以用命令行打开及运行。
 

什么是 Web 服务器?

Web服务器一般指网站服务器,是指驻留于因特网上某种类型计算机的程序,Web服务器的基本功能就是提供Web信息浏览服务。它只需支持HTTP协议、HTML文档格式及URL,与客户端的网络浏览器配合。
大多数 web 服务器都支持服务端的脚本语言(php、python、ruby)等,并通过脚本语言从数据库获取数据,将结果返回给客户端浏览器。
目前最主流的三个Web服务器是Apache、Nginx、IIS。

Web 应用架构

Client - 客户端,一般指浏览器,浏览器可以通过 HTTP 协议向服务器请求数据。
Server - 服务端,一般指 Web 服务器,可以接收客户端请求,并向客户端发送响应数据。
Business - 业务层, 通过 Web 服务器处理应用程序,如与数据库交互,逻辑运算,调用外部程序等。
Data - 数据层,一般由数据库组成。
 
web模块:http
代码示例:
const http=require('http');
var server=http.createServer(function(req,res){ //req----require是请求,res----respond是回应
console.log("访问了一次");//这里改为("req.url")可以返回访问的网址
res.write("在页面上显示文字");
res.end();
});
server.listen(8080);//监听,括号里为本地端口号,一台服务器可能同时对外提供很多种服务,端口是代表访问服务器里哪种服务的一串数字。 这里的地址为localhost:8080.
//用谷歌浏览器返回网址的时候会连带返回/favion.ico这是选项卡默认的小图标
//可以在createServer里用switch控制不同访问网址打开的界面。
 
文件系统:fs
var fs=require("fs");
fs模块中的方法均有同步和异步版本,例如读取文件内容的函数有异步的fs.readFile()和同步的fs.readFileSync()。
异步方法函数最后一个参数为回调函数,回调函数的第一个参数包含了错误信息(error)。
建议使用异步,比起同步,异步方法性能更高,速度更快,而且没有阻塞。
实例:
创建一个index.html文件,内容为
创建file.js文件,代码如下:
var fs= requeir("fs");
//异步读取
fs.readFile("index.html",function(err,data){
if(err){
return console.error(err);
}
console.log("异步读取:"+data.toString());//这里如果不加 toString() 会显示一堆二进制
});
//同步读取
var data =fs.readFileSync('index.html');
console.log("同步读取:"+data.toString());
console.log("程序执行完毕。");
以上代码执行结果入下:
同步读取:www.nodeJs.com

程序执行完毕。//注意这里是程序先执行完毕
异步读取:www.nodeJs.com
 
示例:
const http=require('http');
const fs=require('fs');
var server=http.createServer(function(req,res){
//文件的路径 req.url=>'/index.html'
//将文件都放在一个叫‘www’的文件夹里读取文件只要=>'./www'+req.url;
var file_name='./www'+req.url;
fs.readFile(file_name,function(err,data){
    if(err){
        res.write('404');
     }else{
        res.wirte(data);
    }
    res.end() //注意这玩意的摆放位置
    });
});
server.listen(8080);
 
请求方式----get(数据在url中)
html代码:
<form action="http://localhost:8080/aaa" method="get">
用户:<input type="text" name="user" value="" /><br />
密码:<input type="password" name="pass" value="" /><br />
<input type="submit" value="提交" />
</form>
node.js代码:
var http=require('http');
http.createServer(function(req,res){
console.log(req.url);
res.write('submit success');
res.end();
}).listen(8080);
输入后获得数据,?前面为请求地址,后面为请求数据。
 
字符串切割方式 1
var http = require('http');
http.createServer(function(req, res) {
var GET = {};
if (req.url.indexOf('?')!=-1){
var arr = req.url.split('?');
var url = arr[0];
//arr[0]=>地址 '/aaa'
//arr[1]=>数据 'user=xuhuihong&pass=123456'
var arr2 = arr[1].split('&');
//arr2=>['user=blue','pass=123456']
for (var i = 0; i < arr2.length; i++) {
var arr3 = arr2[i].split('=');
//arr3[0]=>名字 'user'
//arr3[1]=>数据 'blue'
GET[arr3[0]] = arr3[1]; //键值对
}
}else {
var url = req.url;
}
console.log(url, GET);
res.write('submit success');
res.end();
}).listen(8080);
 
字符串切割方式 2
var http = require('http');
const querystring = require('querystring');
http.createServer(function(req, res) {
var GET = {};
if (req.url.indexOf('?')!=-1){
var arr = req.url.split('?');
var url = arr[0];
GET=querystring.parse(arr[1]);
}else {
var url = req.url;
}
console.log(url, GET);
res.write('submit success');
res.end();
}).listen(8080);
 
字符串切割3 ----url模块
示例:
nodejs代码
const urlLib=require('url');
var obj=urlLib.parse('https://www.bilibili.com/index?a=55&b=6600');
console.log(obj);
 
结果
Url {
protocol: 'https:',
slashes: true,
auth: null,
host: 'www.bilibili.com',
port: null,
hostname: 'www.bilibili.com',
hash: null,
search: '?a=55&b=6600',
query: 'a=55&b=6600',
pathname: '/index',
path: '/index?a=55&b=6600',
href: 'https://www.bilibili.com/index?a=55&b=6600' }
如果在parse中加入参数true,query部分会被解析
var obj=urlLib.parse('https://www.bilibili.com/index?a=55&b=6600',true);
 
query: { a: '55', b: '6600' },
切割示例:
var http = require('http');
const urlLib=require('url');
http.createServer(function(req, res) {
var obj=urlLib.parse(req.url,true);
var url=obj.pathname;
var GET=obj.query;
console.log(url, GET);
res.write('submit success');
res.end();
}).listen(8080);
 
 
请求方式----post(数据在文件体中)
get数据的大小最大为32k
post数据最大为1G,因此post数据的发送方式为分段发送。
用form提交的post数据没有url。
 
示例:
const http = require('http');
const querystring=require('querystring');
http.createServer(function(req, res) {
//post--req
var str="";//接受数据
//data--有一段数据到达(很多次)
var i=0;
req.on('data',function(data){
console.log('第${i++}次收到数据');
str+=data;
});
//end-数据全部到达(一次)
req.on('end',function(){
var POST=querystring.parse(str);
console.log(str);
});
}).listen(8080);
结果
user=qqqqqq&pass=aaaaaaaaa
综合示例:
const http=require('http');
const fs=require('fs');
const queryString=require('querystring');
const urlLib=require('url'); var server = http.createServer(function(req,res){
//GET
var obj=urlLib.parse(req.url,true);
var url=obj.pathname;
const GET=obj.query;
//POST
var str='';
req.on('data',function(data){
str+=data;
});
req.on('end',function(){
var POST=queryString.parse(str);
/*
url--要什么
GET--get数据
POST--post数据
*/
console.log(url,GET,POST);
//文件请求
var file_name='./www'+url; //这里url要输完后缀
fs.readFile(file_name,function(err,data){
if(err){
res.write('404');
}else{
res.write(data);
}
res.end();
});
});
});
server.listen(8080);
 
结果:
post方式:/aaa {} { user: 'aaaaa', pass: 'dddddd' }
 
get方式:/aaa { user: 'aaaaaa', pass: 'dddddddddd' } {}

Node.js 学习笔记(一)的更多相关文章

  1. 一点感悟:《Node.js学习笔记》star数突破1000+

    写作背景 笔者前年开始撰写的<Node.js学习笔记> github star 数突破了1000,算是个里程碑吧. 从第一次提交(2016.11.03)到现在,1年半过去了.突然有些感慨, ...

  2. Node.js学习笔记(3):NPM简明教程

    Node.js学习笔记(3):NPM简明教程 NPM常用操作 更新NPM版本 npm install npm -g -g,表示全局安装.我们可以指定更新版本,只需要在后面填上@版本号即可,也可以输入@ ...

  3. 系列文章--Node.js学习笔记系列

    Node.js学习笔记系列总索引 Nodejs学习笔记(一)--- 简介及安装Node.js开发环境 Nodejs学习笔记(二)--- 事件模块 Nodejs学习笔记(三)--- 模块 Nodejs学 ...

  4. Node.js学习笔记(2):基本模块

    Node.js学习笔记(2):基本模块 模块 引入模块 为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码就相对较少,很多编程语言都采用这种组织代码的方式.在No ...

  5. Node.js学习笔记(1):Node.js快速开始

    Node.js学习笔记(1):Node.js快速开始 Node.js的安装 下载 官方网址:https://nodejs.org/en/ 说明: 在Windows上安装时务必选择全部组件,包括勾选Ad ...

  6. Node.js学习笔记(4):Yarn简明教程

    Node.js学习笔记(4):Yarn简明教程. 引入Yarn NPM是常用的包管理工具,现在我们引入是新一代的包管理工具Yarn.其具有快速.安全.可靠的特点. 安装方式 使用npm工具安装yarn ...

  7. Node.js学习笔记(一)

    1.回调函数 node是一个异步事件驱动的平台,所以在代码中我们经常需要使用回调函数. 例: setTimeout(function(){ console.log('callback is calle ...

  8. Node.js学习笔记(一):快速开始

    最近接了一个node项目,虽然最后顺利完成了,但是由于第一次实战,整个过程是赶出来的,许多地方一知半解.现在项目结束了,就静下心来系统地学一学,理一理,读书不忘拿笔,既然读书了,当然就要记点东西.一方 ...

  9. Node.js学习笔记(一)基础介绍

    什么是Node.js 官网介绍: Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine. Node.js us ...

  10. node.js学习笔记(三)——事件循环

    要理解事件循环,首先要理解事件驱动编程(Event Driven Programming).它出现在1960年.如今,事件驱动编程在UI编程中大量使用.JavaScript的一个主要用途是与DOM交互 ...

随机推荐

  1. npm run build 时 报 __webpack_public_path__ = window.webpackPublicPath; 中的windows未定义

    原本 webpack.js在webpack.config.babel.js同目录下,在app.jsx中引用,用mac打包没问题,但是window就报window未定义,改到src和app.jsx同目录 ...

  2. Apache 慢连接dos

    http://neue.v2ex.com/t/108717------不实用 http://www.blogjava.net/bukebushuo/articles/293776.html http: ...

  3. CF922F Divisibility

    题目链接:http://codeforces.com/contest/922/problem/F 题目大意: 对于一个数集 \(I\),定义 \(f(I)\) 为 \(I\) 中满足条件的数对\((a ...

  4. 实用算法系列之RT-Thread链表堆管理器

    [导读] 前文描述了栈的基本概念,本文来聊聊堆是怎么会事儿.RT-Thread 在社区广受欢迎,阅读了其内核代码,实现了堆的管理,代码设计很清晰,可读性很好.故一方面了解RT-Thread内核实现,一 ...

  5. 对 getopts 的理解

    getopts 格式 1 #!/bin/bash 2 echo "begin index is $OPTIND" 3 echo "begin ARG is $OPTARG ...

  6. 【Leetcode】560. 和为K的子数组&974. 和可被 K 整除的子数组(前缀和+哈希表)

    public class Solution { public int subarraySum(int[] nums, int k) { int count = 0, pre = 0; HashMap ...

  7. MySQL常用控制台指令

    MySQL服务的启用与停止 MySQL服务的启用: net start mysql80 MySQL服务的停止: net stop mysql80 MySQL的登入与退出 数据库的登入: mysql - ...

  8. debug PHP程序(xdebug、IntelliJ IDEA)

    之前写PHP程序的都是echo调试,今天感觉太麻烦了就想起研究一下IntelliJ IDEA如何调试PHP程序. 从网上查找了很多资料,大部分都提到在IDE里开启服务,一下就懵了,怎么启这么多服务呢. ...

  9. ATT&CK如何落地到安全产品

    科普:ATT&CK是什么 ATT&CK的提出是为了解决业界对黑客行为.事件的描述不一致.不直观的问题,换句话说它解决了描述黑客行为 (TTP) 的语言和词库,将描述黑客攻击的语言统一化 ...

  10. 【Socket通信】关于Socket通信原理解析及python实现

    Socket(套接字)通信{网络通信其实就是Socket间的通信},首先了解下概念:[来源于百度百科] "两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket.& ...