2.node.js (二)服务器登录注册 与 包的发布

get: 不安全 小 2k 数据会在地址栏上显示 从服务器获取 快
post: 相对安全 https 大 1G 不会 向服务器发送 慢
get:直接解析url地址     
借助 url模块

var urlObj = modUrl.parse(url,true);    

urlObj:{pathname,query} 


post:解析数据 需要 监听两个事件 

var str = "";
req.on("data",function(data){
	str+=data;
});
req.on("end",function(){
	  解析post数据  str=> user=xx&pass=xxx
	  
	  借助 querystring模块
	  var POST = qs.parse(str);
});


req.method=>"GET" "POST"

登录注册(get与post合并)

user.html:
<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title></title>
		<script src="jquery.js"></script>
		<script>
			$(function(){
				$oUser = $("#user");
				$oPass = $("#pass");
				$oLogin = $("#login");
				$oReg = $("#reg");
				$oLogin.click(function(){
					$.ajax({
						type:"get",
						url:"/login",
						data:{
							user:$oUser.val(),
							pass:$oPass.val()
						},
						async:true,
						success:function(str){
							alert(str);
						}
					});
				});
				$oReg.click(function(){
					$.ajax({
						type:"get",
						url:"/reg",
						data:{
							user:$oUser.val(),
							pass:$oPass.val()
						},
						async:true,
						success:function(str){
							alert(str);
						}
					});
				});
			})
		</script>
	</head>
	<body>
		用户名:<input id = "user" type="text" value="aaa"/><br />
		密码: <input id ="pass" type="text" value="123"/><br />
		<input id = "login" type="button" value="登录"/>
		<input id = "reg" type="button" value="注册"/>
		
	</body>
</html>

server.js
var http = require("http");
var fs = require("fs");
var modUrl = require("url");
var qs = require("querystring");
var users = {aaa:123};
var server = http.createServer(function(req,res){
	
	var url = req.url;
	var str = "";
	req.on("data",function(data){
		str += data;
	})
	
	req.on("end",function(){
		var urlObj = modUrl.parse(url,true);
		url = urlObj.pathname;
		var GET = urlObj.query;
		
		var POST = qs.parse(str);
		var params = req.method == "POST" ? POST : GET;
		var username = params.user;
		var password = params.pass;
		if(url == "/login"){
			if(users[username]){
				if(users[username] == password){
					res.end(JSON.stringify({"error":1,"msg":"登陆成功"}));
				}else{
					res.end(JSON.stringify({"error":0,"msg":"用户名或者密码错误"}));
				}
			}else{
				res.end(JSON.stringify({"error":0,"msg":"用户名或者密码错误"}));
			}
		}else if(url == "/reg"){
			if(users[username]){
				res.end(JSON.stringify({"error":0,"msg":"用户名已存在"}));
			}else{
				users[username] = password;
				res.end(JSON.stringify({"error":1,"msg":"注册成功"}));
			}
		}else{
			
			fs.readFile("www"+url,function(err,data){
				if(err){
					res.end("404");
				}else{
					res.end(data);
				}
			})
			
		}
	})	
	
});

server.listen("9000",function(){
	console.log("服务器已打开!");
})

运行效果:

打卡服务器
image
登录

image
image
注册
image

image

image

image

引入模块:
1.自己写的模块在同级目录里,通过"./mode.js"引入,
2.放到node_modules文件夹中,通过 "mode.js" 访问.

exports一个一个的导出.

module.exports 批量导出.

批量导出优先级最高,不覆盖,与次序无关

NPM: node package manager 包管理器

模块组成:

1、系统模块 http fs url querystring
2、第三方模块 jquery vue mysql
3、自定义模块 jsonp str2json

repl - 交互式解释器 面试 没用 命令行编写js

npm install 模块名称
npm uninstall 模块名称
npm update 模块名称
npm update 批量更新

npm search 搜索包 模糊查询
npm home jquery 打开模块的官网


解决npm慢的方法:
1、http://npm.taobao.org/

npm install -g cnpm --registry=https://registry.npm.taobao.org

2、nrm

cnpm install -g nrm

nrm ls 查看所有的镜像源

nrm test 测速

nrm use cnpm 使用镜像源

npm install jquery


简写:

npm install jquery
npm i jquery

npm uninstall jquery
npm un jquery

依赖:(--sav e= -S) (--save-dev = -D)

npm install jquery --save -S
npm install jquery --save-dev -D

npm i -S jquery
npm i -D jquery

工程文件:package.json

dependencies -S 项目依赖 mysql
devDependencies -D 开发依赖 gulp

npm init -y


3、自定义模块

require()
exports
module.exports

exports&&module区别

1、数量
2、优先级module 跟顺序无关
3、module.exports == exports 模块里面最终导出的module.exports

require 引入自定义模块 需要加上 ./

如果不想加 ./ 需要把自己的模块(.js)放到node_modules目录里


发布自己的模块(包)
1、需要有npm账号 https://www.npmjs.com/
2、新建一个项目
1、工程文件 npm init -y       
2、package.json  name 必须唯一  main 入口文件     
3、登陆 npm login

npm whoami

4、发包 npm publish
5、删包 npm unpublish -f --force 删不掉 需要发邮件

包:
image
qd1802.js

var qd1802 = "666";
var address = "CBD"
exports.qd1802 = qd1802;
exports.address = address;

package.json

{
  "name": "qd1802",
  "version": "1.0.3",
  "description": "\"青岛1802测试专用!\"",
  "main": "qd1802.js",
  "dependencies": {
    "jquery": "^3.3.1"
  },
  "devDependencies": {},
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "keywords": [
    "青岛1802测试专用!"
  ],
  "author": "szc",
  "license": "ISC"
}

image

image

必须保存一个版本:
image

posted @ 2018-07-10 13:49  飞刀还问情  阅读(334)  评论(0编辑  收藏  举报