linux上配置好svn服务后,管理修改密码还得去手工修改passwd这个文件,略麻烦,其实网上应该有配套的web管理修改界面程序。但我想自己用nodejs写一个,因为用node不用配置复杂的服务器。

  弄这种基于事件模型的语言,一定要小心,整个过程可能不是线性的。

 1 var http = require("http");
 2 var fs = require('fs');
 3 var url = require('url');
 4 var query = require('querystring');
 5
 6 var PASSWD_FILE = "/home/svn/conf/passwd";
 7
 8 http.createServer(function(request, reponse) {
 9     var params = url.parse(request.url);
10     var obj = query.parse(params.query);
11     var tm = new Date();
12     try {
13         console.log(tm.toLocaleString());
14         console.log(obj);
15         reponse.writeHead(200, {"Content-Type": "text/html"});
16         if(params.pathname == '/change') {
17             changePassword(obj.name.trim(), obj.password.trim(), obj.npassword.trim(), reponse);
18
19         } else {
20         fs.readFile("./main.html", "utf-8", function(err, data) {
21             reponse.write(data);
22             reponse.end();
23         });
24         }
25     } catch(err) {
26             console.log(err);
27     }
28 }).listen(8000);
29
30 function changePassword(name, password, npassword, reponse) {
31     var change = false;
32     fs.readFile(PASSWD_FILE, "utf-8", function(error, data) {
33         arr = data.split('\n');
34         for (var i = 0 ;i < arr.length; ++i) {
35             if(arr[i].indexOf("#") == -1 && arr[i].indexOf("[users]") == -1) {
36                 ap=arr[i].split("=");
37                 if(ap.length != 2) {
38                     continue;
39                 }
40                 var account = ap[0].trim();
41                 var passwd = ap[1].trim()
42                 if(name == account && password == passwd && npassword.length >= 3) {
43                     change = true;
44                     arr[i] = "";
45                     console.log("change account "+account + " password " + npassword);
46                     arr[i] = account + "=" + npassword;
47                 }
48             }
49         }
50
51         var outdata = "";
52         for (var i = 0; i < arr.length; i++) {
53             if(arr[i].replace(/(^s*)|(s*$)/g, "").length ==0) {
54                 continue;
55             }
56             outdata += (arr[i] + '\n');
57         };
58
59         fs.writeFile(PASSWD_FILE, outdata ,"utf-8", function(error) {
60             if(error || change == false) {
61                 fs.readFile("./error.html", "utf-8", function(err, data) {
62                 reponse.write(data);
63                 reponse.end();
64                 });
65             } else {
66                 fs.readFile("./success.html", "utf-8", function(err, data) {
67                 reponse.write(data);
68                 reponse.end();
69                 });
70             }
71         });
72     });
73 }

启动脚本命令:nohup node main.js > node.log &

nohup & 启动程序并后台执行,不会使程序跟着控制台的死掉而死掉;> node.log把控制台的日志重定向到node.log中去。

转载于:https://www.cnblogs.com/wendao/p/4952503.html

用nodejs做一个svn密码修改页面相关推荐

  1. 使用有道词典API做一个简单的翻译页面 HTML+JS+有道词典API(代码可直接运行)

    使用有道词典API做一个简单的翻译页面 HTML+JS+有道词典API(代码可直接运行) 代码很简单,适合初学者学习借鉴.可以当成一个小工具使用. 注意: 1.代码应联网使用. 2.在输入密钥和id时 ...

  2. DWZ 用dialog调用MVC自动生成的密码修改页面一直出现“数据加载中,请稍等...”和去掉“数据加载中,请稍等”的方法

    在MVC框架中调用JS框架<DWZ富客户端框架>在用dialog调用自动MVC系统自动生成的密码修改页面一直出现"数据加载中,请稍等..."的问题. <a tit ...

  3. vue 做一个定点地图的页面(定位到你想要的地点)

    实例:如何用vue做一个定点地图的页面,进入一个地图,并且定位到你想要的地点. 这里举一个定点医院的例子. 在pages中添加一个vue页面为Hospital_map.vue,将该网页注册到路由src ...

  4. [Js插件]使用JqueryUI的弹出框做一个“炫”的登录页面

    引言 查看项目代码的时候,发现项目中用到JqueryUi的弹出框,可拖拽,可设置模式对话框,就想着使用它弄一个登录页面. 弹出框 在Jquery Ui官网可定制下载弹出框,下载和弹出框下载相关的js文 ...

  5. 新手怎么做一个免费的单页面响应式网站?

    单页面网站近年来受到很多企业青睐,一个干干净净的单页面,不仅能直观地传达企业信息,在展示上也给了企业更多的可能性.部分企业做单页面网站是为了做营销活动,不仅能为主站引流,更能让单页网站的转化更为直观, ...

  6. 游戏测试 | 游戏工具:做一个可以即时修改卡牌属性的工具方便测试

    本文由特尔斯特发表于TesterHome论坛,点击原文链接可查看作者的更多文章并与ta在线交流. 场景: 在测试战斗的过程中经常需要调数值来方便测试.比如要测某张卡牌的法术技能,直接测要等这张卡牌满蓝 ...

  7. [electron 工具] 使用 electron、vue 和 nodejs 做一个网件路由器 SOAP API 测试工具之一 ( 简介 )...

    (简介直接将主页的介绍复制过来好了) Soap-Sender 主页 1.0.1 更新记录 优化基本设置页面判断 IP 和密码的响应时间 保存基本设置页面的设置 历史记录添加 Response Time ...

  8. 游戏测试 | 测试工具:做一个可以即时修改卡牌属性的工具方便测试

    01 场景 在测试战斗的过程中经常需要调数值来方便测试.比如要测某张卡牌的法术技能,直接测要等这张卡牌满蓝了放法术看效果,这样不是很方便,因为它可能在放法术之前被杀了,又或者放法术的时机不是自己想要的 ...

  9. 用NodeJs做一个小爬虫

    作者:北京起步科技前端研究员,专注分享HTML5 App快速开发工具 WeX5 的黑魔法以及相应的前端技术. 前言 利用爬虫可以做很多事情,单身汉子们可以用爬虫来收集各种妹子情报,撩妹族们可以用爬虫收 ...

最新文章

  1. 三步走——带你打造一份完美的数据科学家简历|(附件有PPT福利)
  2. ASP3.0给我们带来的新技术之一---DataShaping技术
  3. python3 request模块 post请求四种方式
  4. mongodb小结(转)
  5. 马鞍山职业计算机考试,2020年职业适应性(技能)测试纲要
  6. NET问答:Select 和 SelectMany 的区别
  7. RabbitMQ MQTT协议和AMQP协议
  8. Qt 字符串QString arg()用法总结
  9. 开发一个最简单的Cardboard虚拟现实应用(四)做一个Cardboard第一人称控制器
  10. java 中super_Java中的super
  11. 动环监控系统服务器维护,机房动环设备维护与检测的13个具体内容
  12. openGL之API学习(一二七)dFdx、dFdy偏导数
  13. leetcode 1723.完成所有工作的最短时间 - 二分+递归
  14. python批量检索文献pubmed_PubMed快速检索文献,学学这些技巧!
  15. 微信公众号和微信小程序进程名获取及配置
  16. 【嵌入式操作系统-2】Cortex-M7处理器编程者模型
  17. Linux下磁盘挂载
  18. 日志分析---携来百侣曾游,忆往昔峥嵘岁月稠
  19. ssm基于Java的微小企业人事管理系统的设计与实现毕业设计源码231012
  20. [转] C++ STL详解

热门文章

  1. Nginx自学手册(六)Nginx+Tomcat实现动静分离
  2. skynet源码阅读7--死循环检测
  3. c# 如何读取和写入ini(配置文件)
  4. 详解CSS的Flex布局
  5. Elasticsearch Java Low Level REST Client(读取响应)
  6. eclipse没有Web分支Dynamic Web Project
  7. Linux Watchdog Test Program
  8. (林雷看来13):功能优先,发展和重建同步,业绩后
  9. outlook客户端接收邮件报错0x80040600
  10. 推荐一些好书(PHP方向)