Node简单服务器开发

运用的知识:http,fs,get,post

接口定义:
/user?act=reg$user=aaa&pass=bbb
后台返回格式:{"ok":false,"msg":"原因"}
/user?act=login$user=aaa&pass=bbb
后台返回格式:{"ok":true,"msg":"原因"}

前端访问:
对文件的访问:
http://localhost:8080/1.html
http://localhost:8080/ajax.js
http://localhost:8080/1.jpg

对接口的访问:
http://localhost:8080/user?act=reg$user=aaa&pass=bbb

服务器(后端代码):
const http = require("http");
const querystring = require("querystring");
const fs = require("fs");
const urlLib = require("url");

var users = {}; //定义用户json,比如{“blue”:“123456”,“zhangsan”:“666666”}

var server = http.createServer(function(req,res){
var str = "";
req.on("data",function(data){
str += str;
});
req.on("end",function(){
var obj = urlLib.parse(req.url,true);
const url = obj.pathname;
const GET = obj.query;
const POST = querystring.parse(str);

//区分一下前端到底访问接口还是文件
if (url == '/user') { //访问接口
switch (GET.act){
case 'reg':
//检查前端传过来的参数用户名是否已经有了
if (users[GET.user]) {
res.write('{"ok":false,"msg":"此用户已存在"}')
} else{
//有的话往users里面插入
users[GET.user] = GET.pass;
res.write('{"ok":true,"msg":"注册成功"}');
}
break;
case '/login':
//检查用户是否存在
if (users[GET.user]==null) {
res.write('{"ok":false,"msg":"用户不存在"}');
} else if(users[GET.user]!=GET.pass){
//检查用户密码是否正确
res.write('{"ok":false,"msg":"密码不对"}');
}else{
res.write('{"ok":true,"msg":"登录成功"}');
}
break;
default:
res.write('{"ok":false,"msg":"未知的act"}');

}
res.end();
} else{ //访问文件
//读取文件
var file_name = "./www"+url;
fs.readFile(file_name,function(err,data){
if (err) {
res.write("404");
} else{
res.write(data);
}
res.end();
});
}
});
}).listen(8081);

前端代码:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script type="text/javascript" src="ajax.js" ></script>
<script>
window.οnlοad=function(){
var oTxtUser = document.getElementById("user");
var oTxtPass = document.getElementById("pass");
var oBtnReg = document.getElementById("reg_btn");
var oBtnLogin = document.getElementById("login_btn");

//注册按钮事件
oBtnReg.onclick = function(){
ajax({
url:'/user', //这里是接口的名字
data:{act:'reg', user:oTxtUser.value, pass:oTxtPass.value},//这里是传递过去的参数
type:'get',
success:function(str){
var json = eval('('+str+')');
if (json.ok) {
alert("注册成功");
} else{
alert("注册失败:" + json.msg);
}
},
error:function(){
alert("通信错误")
}
});
}


//登录按钮事件
oBtnLogin.onclick = function(){
ajax({
url:'/user', //这里是接口的名字
data:{act:'reg', user:oTxtUser.value, pass:oTxtPass.value},//这里是传递过去的参数
type:'get',
success:function(str){
var json = eval('('+str+')');
if (json.ok) {
alert("登录成功");
} else{
alert("登录失败:" + json.msg);
}
},
error:function(){
alert("通信错误")
}
});
}
}
</script>
</head>
<body>
用户名: <input type="text" id="user"/><br />
密码:<input type="password" id="pass"/><br />
<input type="button" id="reg_btn" value="注册" />
<input type="button" id="login_btn" value="登录" />
</body>
</html>

转载于:https://www.cnblogs.com/fengyongxian/p/8900662.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/353768.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

5个常见的Hibernate异常及其解决方法

了解如何使用Hibernate轻松解决最常见的问题 Hibernate可能是市场上最受欢迎的JPA实现&#xff0c;您可以在许多地方看到它&#xff0c;例如&#xff1a; 您自己使用过的项目数&#xff0c; 需要Hibernate经验的职位数量&#xff0c;当然还有 互联网上发布的问题和例外数量…

MATLAB figure中提取数据

MATLAB figure中提取数据 (2011-10-26 14:26:21) 转载▼标签&#xff1a; 杂谈 分类&#xff1a; matlab figure画出来&#xff0c;提取数据有很多好处&#xff0c;方便保存&#xff0c;计算&#xff0c;加工&#xff0c;还可以导入到origin里面画图。具体的方法就是两部。第一…

Wine下完美安装QQ 2010:

Wine下完美安装QQ 2010&#xff1a;1、先安装Wine&#xff1a;sudo apt-get install wine2、获取获取最新的WineTricks&#xff0c;WineTricks 是 Wine的其中一个开发者DanKegel写的一个安装Windows有关库和软件的小程序&#xff0c;非常有用。下载WineTricks&#xff0c;在终端…

stopwatch_在Java中衡量执行时间– Spring StopWatch示例

stopwatch有两种方法可以通过使用System.currentTimeinMillis&#xff08;&#xff09;或使用System.nanoTime&#xff08;&#xff09; 来测量Java中经过的执行时间 。 这两个方法可用于测量 Java中两个方法调用或事件之间的经过时间或执行时间 。 计算经过的时间是Java程序员…

oracle客户端中文乱码问题的解决

1 查看服务器端编码 select userenv(language) from dual; 我实际查看到的结果为&#xff1a; USERENV(LANGUAGE) ----------------------------- AMERICAN_AMERICA.ZHS16GBK 2 执行语句 select * from V$NLS_PARAMETERS; 查看第一行PARAMETER项中为NLS_LANGUAGE对应的VALUE项…

avi文件格式详解

avi文件格式详解 AVI是音频视频交错(Audio Video Interleaved)的英文缩写&#xff0c;它是Microsoft公司开发的一种符合RIFF文件规范的数字音频与视频文件格式&#xff0c;原先用于Microsoft Video for Windows (简称VFW)环境&#xff0c;现在已被Windows 95/98、OS/2等多数操作…

许多参数和丢失的信息

代码越少越好&#xff1f; 对象越少越好&#xff1f; 是真的吗 像往常一样&#xff0c;这取决于。 在某些情况下&#xff0c;通过添加更多内容&#xff0c;我们会添加不必要的复杂性。 当我们仅出于“将来可能需要这种额外的灵活性”而创建接口或其他抽象时&#xff0c;就会发…

并发编程---线程queue---进程池线程池---异部调用(回调机制)

线程 队列&#xff1a;先进先出堆栈&#xff1a;后进先出优先级&#xff1a;数字越小优先级越大&#xff0c;越先输出import queueq queue.Queue(3) # 先进先出-->队列q.put(first) q.put(2) # q.put(third) # q.put(4) #由于没有人取走&#xff0c;就会卡主 q.put(4,block…

avi编码格式以及查看的视频编码方式的小工具

avi编码格式以及查看的视频编码方式的小工具 2009-06-06 17:55:47| 分类&#xff1a; 默认分类 | 标签&#xff1a; |字号大中小 订阅 首先要说明的是&#xff0c;文件后缀名为avi的文件不一定使用的编码方式就是一样的&#xff0c;所以才写下来&#xff0c;以备以后查阅…

SQL Server遗失管理权限账号密码怎么办?

假如一个SQL Server实例只允许“SQL身份认证”模式登录数据库&#xff0c;而糟糕的是你忘记了sa的密码&#xff08;sa出于安全考虑应该被禁用&#xff0c;这里仅仅为了描述问题&#xff09;或其它具有sysadmin角色的登录名的密码&#xff1f;个人就遇到这样一个案例&#xff0c…

MFC 定时器使用方式

MFC 定时器使用方式 2011-04-30 12:24:58| 分类&#xff1a; 默认分类 | 标签&#xff1a; |字号大中小 订阅 用SetTimer函数 创建定时器 参数1表示定时器的ID&#xff0c;参数2表示时间间隔&#xff0c;最后一个参数是处理的函数&#xff0c;如果填NULL表示&#xff0…

js循环获取table中的值

<script type"text/javascript">function getTdValue() {var tableId document.getElementById("tab");var str "";//获取table中的某一列的值for (var i 1; i < tableId.rows.length; i) {alert(tableId.rows[i].cells[3].innerHTM…

MFC中Radio Button使用方法

MFC中Radio Button使用方法2012-04-19 09:44:22 我来说两句 收藏 我要投稿 先为对话框加上2个radio button&#xff0c;分别是Radio1和Radio2。 问题1&#xff1a;如何让Radio1或者Radio2默认选上&#xff1f;如何知道哪个被选上了&#xff1f; 关键是选上&#x…

使用不可变对象创建值对象

在回答我最近的文章中AutoValue&#xff1a;生成的不可变的值类 &#xff0c; 布兰登认为&#xff0c;这可能是有趣的&#xff0c;看看如何AutoValue比较项目Lombok和Immutables和凯文借调这一点。 我同意这是一个好主意&#xff0c;但是我首先将这篇文章发布为Immutables的简要…

css3 transform实现水平和垂直居中

代码如下&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><meta http-equiv"X-UA-Compatible…

ubuntu vnc 远程连接桌面

ubuntu vnc 远程连接桌面 2011-05-18 10:30:48 分类&#xff1a; LINUX 一、WindowsXP远程连接Ubuntu的桌面 1.在WindowsXP上下载并安装RealVNC; 2.在Ubuntu中操作&#xff0c;打开 应用程序/互联网 /远程桌面查看器; 3.首先要配置一下&#xff0c;打开 系统/首选项/远程桌面&…

hkws摄像头拆机

转载于:https://www.cnblogs.com/feipeng8848/p/8961924.html

java虚拟机常用命令工具

java虚拟机常用命令工具 博客分类&#xff1a; 虚拟机 虚拟机jvmjava 一、概述 程序运行中经常会遇到各种问题&#xff0c;定位问题时通常需要综合各种信息&#xff0c;如系统日志、堆dump文件、线程dump文件、GC日志等。通过虚拟机监控和诊断工具可以帮忙我们快速获取、分…

Spring Cloud Zuul –编写过滤器

Netflix OSS项目Zuul充当后端服务的网关&#xff0c;并支持添加安全性&#xff0c;路由等边缘功能。 在Zuul世界中&#xff0c;称为Zuul过滤器的组件提供了特定的边缘功能&#xff0c;为基于Spring Cloud的项目编写这种过滤器非常简单。 此处提供了添加过滤器的良好参考。 在这…

嵌入式基础篇 - 第2章 Systick系统定时器

2.1 STM32 的时钟系统 STM32 芯片为了实现低功耗&#xff0c;设计了一个功能完善但却非常复杂的时钟系统。普通的MCU 一般只要配置好 GPIO 的寄存器就可以使用了&#xff0c;但 STM32 还有一个步骤&#xff0c;就是开启外设时钟。 图2-1 STM32的时钟树在 STM32 中&#xff0c;…