首页 > 代码库 > node
node
官网
https://nodejs.org/en/
nodeJs搭建一个简单的服务器
浏览器和服务器通信需要http协议完成
//1 引入http模块 var http = require(‘http‘); //2 创建服务器 请求 响应 var server = http.createServer(function(request,response){ console.log(‘有访问‘); response.write(‘abc‘); response.end(); }) //3 监听8080端口 server.listen(8080); //4 终端输入 node server.js启动服务器 //5 浏览器测试 localhost:8080 页面虽然无显示,但是控制台中每当有访问会打印 有访问
response 响应给客户端的信息
1 response.write() 会输出到浏览器
2 response.end() 输出结束
request 请求过来的信息 01/request.js
1 request.url 请求过来的url
localhost:8080/1.html /1.html /favicon.ico 浏览器自动给你请求的网站小图标
fs 模块
- 问题一:页面多了,不可能都写在switch case中
- 问题二:只能响应文字类的东西,无法返回文件
- 问题三:每次修改都要重新启动服务器
1 readFile(文件名,回调) 02fs/1.js
fs.readFile(‘aaa.txt‘,function(err,data){ console.log(data); //<Buffer 73 66 61 73 6b 6c 66 6a 0a 31 31 31 31 0a 32 32 32 32 0a 33 33 33 33 0a> console.log(data.toString());//把二进制转为 字符串 })
2 writeFile(文件名,内容,回调) 02fs/1.js
fs.writeFile(‘bbb.txt‘,‘new data‘,function(err,data){ console.log(err,‘err‘); console.log(data,‘data‘); })
fs与服务器结合 02fs/server.js
1 02fs/www 网站根目录,可以外部访问的根目录
req.url => ‘/index.html‘ 读取 ‘./www/index.html‘ ‘./www‘+req.url var fileName = ‘./www‘+req.url;
2 www/index.html
<div style="background:red;"> div </div>
3 02fs/server.js
const http = require(‘http‘); const fs = require(‘fs‘); var server = http.createServer(function(req,res){ var filename = ‘./www‘ + req.url; fs.readFile(filename,(err,data)=>{ if(err){ res.write(‘404‘); }else{ res.write(data);//机器对机器本来就是二进制,所以不用toString } res.end(); }) }) server.listen(8080);
4 当前服务器问题,需要能够接收到前台发过来的参数
http-解析get参数 03get/server.js 03get/form.html
接收前台的数据请求
- 前台: form、ajax、jsonp
- 后台: 一样
- 前台《---》 后台 :走的都是http协议,对后台而言只是接收到一个http请求
请求方式不同,接收不同
1 GET:数据在url中
2 POST:数据不在url中
请求头 header 请求体 content POST数据
queryString 解析查询字符串 03get/queryString.js
const queryString = require(‘queryString‘); var json = queryString.parse("username=yuonly&password=123123"); console.log(json);
url模块 方便的获取地址和get数据 03get/url.js
const urlLib = require(‘url‘); //没有第二个参数时 var obj = urlLib.parse(‘http://www.zyx58.com/index?a=12&b=5‘); console.log(obj); //obj 结果 Url { protocol: ‘http:‘, 协议 slashes: true, auth: null, host: ‘www.zyx58.com‘, 主机 port: null, 端口 hostname: ‘www.zyx58.com‘, 主机名 hash: null, search: ‘?a=12&b=5‘, query: ‘a=12&b=5‘,数据 pathname: ‘/index‘,地址 path: ‘/index?a=12&b=5‘,请求路径 href: ‘http://www.zyx58.com/index?a=12&b=5‘ } //第二个参数为true时 var obj = urlLib.parse(‘http://www.zyx58.com/index?a=12&b=5‘,true); console.log(obj); Url { protocol: ‘http:‘, slashes: true, auth: null, host: ‘www.zyx58.com‘, port: null, hostname: ‘www.zyx58.com‘, hash: null, search: ‘?a=12&b=5‘, query: { a: ‘12‘, b: ‘5‘ }, 数据 query已经被解析为json pathname: ‘/index‘, //地址 path: ‘/index?a=12&b=5‘, href: ‘http://www.zyx58.com/index?a=12&b=5‘ }
使用url搭建server 来解析请求地址和get参数 03get/urlServer.js
const http = require(‘http‘); const urlLib = require(‘url‘); http.createServer((req,res)=>{ var obj = urlLib.parse(req.url,true); var url = obj.pathname; var GET = obj.query; console.log(url,GET); }).listen(8080);
总结:get参数获取方式 最大 32K
- 自己动手用 split切
- queryString 模块
- url 模块
POST数据获取方式 1G 04post/server.js 04post/form.html
1 on(‘data‘,function(data){}) 每当有一段数据到达的时候,就会触发一次
2 on(‘end‘,function(){}) 数据完全到达的时候触发一次
3 数据解析仍然可以使用 queryString模块解析
var http = require(‘http‘); var queryString = require(‘queryString‘); http.createServer((req,res)=>{ //post - req post 数据大,所以要分段发送 //data 每当有一段数据到达的时候,就会触发一次 //end 数据完全到达的时候触发一次 var str = ‘‘;//等待接收数据 var i = 0;//验证是否分很多次到达 req.on(‘data‘,function(data){ console.log(`第${i++}次到达`); str += data; }) req.on(‘end‘,function(){ // console.log(str); var POST = queryString.parse(str); console.log(POST); }) }).listen(8080);
server基本内容 05base_server/server.js
const http = require(‘http‘); const fs = require(‘fs‘); const queryString = require(‘queryString‘); const urlLib = require(‘url‘); http.createServer((req,res)=>{ //GET var obj = urlLib.parse(req.url,true); var url = obj.pathname; const GET = obj.query; //POST var str = ‘‘; var POST = {}; req.on(‘data‘,function(data){ str += data; }) req.on(‘end‘,function(){ POST = queryString.parse(str); console.log(url,GET,POST); }) // url 要那个文件 // GET get数据 // POST post数据 // ================ 文件请求====== var filename = ‘./www‘+url; fs.readFile(filename,function(err,data){ if(err){ res.write(‘404‘); }else{ res.write(data); } res.end(); }) // localhost:8080/aaa.html }).listen(8080);
httpserver 实现用户注册/登录 06httpserver
1 接口
- 注册:/user?act=reg&username=aaa&pwd=123 return {"ok":false,"msg":"原因"} {"ok":true,"msg":"成功信息"}
- 登录: /user?act=login&username=aaa&pwd=123
2 对接口的访问 if(url==‘/user‘)
3 对文件的访问 else
模块化 07module
文档 : http://nodejs.cn/api/
- 系统模块: http、queryString、url、Crypto-加密、Events-事件、Net-网络操作、OS-操作系统信息、Path-处理文件路径、Stream-流操作、Timer-定时器(interval/timeout)、SSL-加密传输、utils-工具方法、ZLIB-压缩
- 自定义模块:
- 模块管理:包管理器
自定义模块
- 模块组成
- npm
- 发布自己的模块
1 模块组成
-
require: 引入模块
既可以引入系统模块,又可以引入文件模块,所以即便是当前目录也要加上 ./ 没有全局变量,相当于 (function(require,exports,module){ var a = 12; exports.a = 12; })()
-
exports: 导出、输出。一个一个输出
-
module: 模块。批量输出东西
对外输出一堆东西 exports.a = 12; exports.b = 5; exports.c = 99; module.exports = {a:12,b:5,c:99} console.log(module.exports === exports);//true:说明是一个东西
require(‘./mod1.js‘) .js可以省略不写
npm:Nodejs Package Manager(Nodejs包管理器)
- 统一的下载途径。类似360软件管家
-
自动下载依赖
安装 npm i mysql --save 卸载 npm uninstall mysql
npm
1 手动创建node_modules目录
2 把 mod1.js放入 node_modules目录中
3 require(‘mod1.js‘); 可以不加./了
require 1. 如果有 ‘./‘ 从当前目录找
- 如果没有 ‘./’。首先从系统模块中找,没有,再去node_modules目录中找
发布自己的模块
- 官网: www.npmjs.com
1 注册账号
2 登录
npm login 输入用户名、密码、邮箱
3 查看当前登录的账号
npm whoami
4 npm init初始化包信息,会生成package.json
5 发布
npm publish
6 更新
npm update test0528
7 删除
npm unpublish --force
node
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。