一个练习项目,好玩的bbs-perl-limper
代码:
#! D:/software/Strawberry/perl/bin/perl.exe BEGIN { push (@INC,'D:/workspace/studys/study_bbs'); } use strict; use warnings; use utf8; use Limper; use Limper::SendJSON; use Net::MySQL; use Encode; use POSIX; use JSON qw/encode_json decode_json/; use Digest; use URI::Escape; our $pagesize = 20; our $secretKey = 'saacac3423@21212'; sub getloginuserinfo{ my $sessionId = shift; my $mysql = Net::MySQL->new( hostname => '127.0.0.1', port => '3306', database => 'my_bbs', user => 'root', password => '123456' ); $mysql->query("SET NAMES 'utf8mb4'"); $mysql->query("SELECT id,username,nickname,addTime,sessionId FROM user where sessionId='".$sessionId."'"); my $record_set = $mysql->create_record_iterator; my %row = (); while (my $ref = $record_set->each) { $ref->[1] = decode("utf-8", $ref->[1]); $ref->[2] = decode("utf-8", $ref->[2]); $row{"id"} = $ref->[0]; $row{"username"} = $ref->[1]; $row{"nickname"} = $ref->[2]; $row{"addTime"} = $ref->[3]; } return %row; } sub getmyparam{ my $name = shift; my $query = request->{query}; my @words; if (index($query, '&') != -1) { @words = split '&', $query; } else{ push @words, $query; } for my $element (@words) { if (index($element, '=') != -1) { my @tmps = split '=', $element; if($tmps[0] eq $name){ return $tmps[1]; } } } return ''; } get '/' => sub { headers 'Content-type' => 'text/html; charset=utf-8', 'Server' => 'perl-limper'; #perl真是一种奇怪的语言 return "此站接口使用perl.limper实现,<a href='api.html' target='_blank'>接口列表</a>,xxxxxxxxxxxxxxxxxxxxxxxxx"; }; get '/user/register' => sub { headers 'Content-type' => 'text/html; charset=utf-8', 'Server' => 'perl-limper'; my $username = uri_unescape(getmyparam('username')); my $password = uri_unescape(getmyparam('password')); my $nickname = uri_unescape(getmyparam('nickname')); my $passwordmd5 = Digest->new('MD5')->add($password)->hexdigest; my $mysql = Net::MySQL->new( hostname => '127.0.0.1', port => '3306', database => 'my_bbs', user => 'root', password => '123456' ); $mysql->query("SET NAMES 'utf8mb4'"); $mysql->query("SELECT id,username,nickname,addTime FROM user where username='".$username."'"); my $record_set = $mysql->create_record_iterator; my %row = (); while (my $ref = $record_set->each) { $ref->[1] = decode("utf-8", $ref->[1]); $ref->[2] = decode("utf-8", $ref->[2]); $ref->[3] = decode("utf-8", $ref->[3]); $row{"id"} = $ref->[0]; $row{"username"} = $ref->[1]; $row{"nickname"} = $ref->[2]; $row{"addTime"} = $ref->[3]; } my $insertid = 0; if(keys %row == 0){ my $tmpstr = $secretKey . $row{"id"} . $row{"addTime"}; my $sessionId = Digest->new('MD5')->add($tmpstr)->hexdigest; $mysql->query("insert into user(username, password, nickname) value('".$username."', '".$passwordmd5."', '".$nickname."')"); $insertid = $mysql->get_insert_id(); my $res_data = {'code' => 0, 'msg' => '', 'data' => $insertid}; encode_json($res_data); } else{ my $res_data = {'code' => 1, 'msg' => '用户名已经存在', 'data' => 0}; encode_json($res_data); } }; get '/user/login' => sub { headers 'Content-type' => 'text/html; charset=utf-8', 'Server' => 'perl-limper'; my $username = uri_unescape(getmyparam('username')); my $password = uri_unescape(getmyparam('password')); my $passwordmd5 = Digest->new('MD5')->add($password)->hexdigest; my $mysql = Net::MySQL->new( hostname => '127.0.0.1', port => '3306', database => 'my_bbs', user => 'root', password => '123456' ); $mysql->query("SET NAMES 'utf8mb4'"); $mysql->query("SELECT id,username,nickname,addTime FROM user where username='".$username."' and password='".$passwordmd5."'"); my $record_set = $mysql->create_record_iterator; my %row = (); while (my $ref = $record_set->each) { $ref->[1] = decode("utf-8", $ref->[1]); $ref->[2] = decode("utf-8", $ref->[2]); $ref->[3] = decode("utf-8", $ref->[3]); $row{"id"} = $ref->[0]; $row{"username"} = $ref->[1]; $row{"nickname"} = $ref->[2]; $row{"addTime"} = $ref->[3]; } my $res_data; if(keys %row != 0){ my $tmpstr = $secretKey . $row{"id"} . $row{"addTime"}; my $sessionId = Digest->new('MD5')->add($tmpstr)->hexdigest; $mysql->query("update user set sessionId='".$sessionId."' where id=".$row{"id"}); $row{"sessionId"} = $sessionId; $res_data = {'code' => 0, 'msg' => '', 'data' => \%row}; } else{ $res_data = {'code' => 1, 'msg' => '用户名或者密码错误', 'data' => ''}; } encode_json($res_data); }; get '/user/logout' => sub { headers 'Content-type' => 'text/html; charset=utf-8', 'Server' => 'perl-limper'; my $sessionId = getmyparam('sessionId'); my %row = getloginuserinfo($sessionId); my $mysql = Net::MySQL->new( hostname => '127.0.0.1', port => '3306', database => 'my_bbs', user => 'root', password => '123456' ); $mysql->query("SET NAMES 'utf8mb4'"); if(keys %row != 0){ $mysql->query("update user set sessionId='' where sessionId=".$sessionId); $row{"sessionId"} = ''; } my $res_data = {'code' => 0, 'msg' => '', 'data' => \%row}; encode_json($res_data); }; get '/user/getuserinfo' => sub { headers 'Content-type' => 'text/html; charset=utf-8', 'Server' => 'perl-limper'; my $sessionId = getmyparam('sessionId'); my %row = getloginuserinfo($sessionId); my $res_data = {'code' => 0, 'msg' => '', 'data' => \%row}; encode_json($res_data); }; get '/post/list' => sub { headers 'Content-type' => 'text/html; charset=utf-8', 'Server' => 'perl-limper'; my $page = int(getmyparam('page')); my $keyword = uri_unescape(getmyparam('keyword')); if(!$page){ $page = 1; } my $start = ($page - 1) * $pagesize; my $mysql = Net::MySQL->new( hostname => '127.0.0.1', port => '3306', database => 'my_bbs', user => 'root', password => '123456' ); $mysql->query("SET NAMES 'utf8mb4'"); my $addsql = " isDel=0 "; if($keyword){ $addsql = " isDel=0 and title like '%".$keyword."%' "; } $mysql->query("SELECT count(1) as count FROM content where ".$addsql); my $record_set = $mysql->create_record_iterator; my $count = 0; while (my $ref = $record_set->each) { $count = $ref->[0]; } my $totalpage = int(ceil($count / $pagesize)); $mysql->query("SELECT id,title,userNickename,replyNum,updateTime,userId FROM content where ".$addsql." order by updateTime desc limit ".$start.",".$pagesize); $record_set = $mysql->create_record_iterator; my @post_lists = (); while (my $ref = $record_set->each) { $ref->[1] = decode("utf-8", $ref->[1]); $ref->[2] = decode("utf-8", $ref->[2]); $ref->[4] = decode("utf-8", $ref->[4]); push(@post_lists, {"id" => $ref->[0], "title" => $ref->[1], "userNickename" => $ref->[2], "replyNum" => $ref->[3], "updateTime" => $ref->[4], "userId" => $ref->[5]}) } my $res_data = {'code' => 0, 'msg' => '', 'data' => {'totalpage' => $totalpage, 'data' => \@post_lists}}; encode_json($res_data); }; get '/post/detail' => sub { headers 'Content-type' => 'text/html; charset=utf-8', 'Server' => 'perl-limper'; my $id = getmyparam('id'); my $mysql = Net::MySQL->new( hostname => '127.0.0.1', port => '3306', database => 'my_bbs', user => 'root', password => '123456' ); $mysql->query("SET NAMES 'utf8mb4'"); $mysql->query("SELECT id,title,content,userId,userNickename,replyNum,updateTime FROM content where id='".$id."'"); my $record_set = $mysql->create_record_iterator; my %row = (); while (my $ref = $record_set->each) { $ref->[1] = decode("utf-8", $ref->[1]); $ref->[2] = decode("utf-8", $ref->[2]); $ref->[4] = decode("utf-8", $ref->[4]); $ref->[6] = decode("utf-8", $ref->[6]); $row{"id"} = $ref->[0]; $row{"title"} = $ref->[1]; $row{"content"} = $ref->[2]; $row{"userId"} = $ref->[3]; $row{"userNickename"} = $ref->[4]; $row{"replyNum"} = $ref->[5]; $row{"updateTime"} = $ref->[6]; } my $res_data = {'code' => 0, 'msg' => '', 'data' => \%row}; encode_json($res_data); }; get '/post/add' => sub { headers 'Content-type' => 'text/html; charset=utf-8', 'Server' => 'perl-limper'; my $title = uri_unescape(getmyparam('title')); my $content = uri_unescape(getmyparam('content')); my $sessionId = getmyparam('sessionId'); my %userInfo = getloginuserinfo($sessionId); my $userId = $userInfo{"id"}; my $nickname = $userInfo{"nickname"}; $nickname = encode("utf-8", $nickname); my $mysql = Net::MySQL->new( hostname => '127.0.0.1', port => '3306', database => 'my_bbs', user => 'root', password => '123456' ); $mysql->query("SET NAMES 'utf8mb4'"); $mysql->query("insert into content(title, content, userId, userNickename) value('".$title."', '".$content."', ".$userId.", '".$nickname."')"); my $insertid = $mysql->get_insert_id(); my $res_data = {'code' => 0, 'msg' => '', 'data' => $insertid}; encode_json($res_data); }; get '/post/edit' => sub { headers 'Content-type' => 'text/html; charset=utf-8', 'Server' => 'perl-limper'; my $id = getmyparam('id'); my $title = uri_unescape(getmyparam('title')); my $content = uri_unescape(getmyparam('content')); my $sessionId = getmyparam('sessionId'); my %userInfo = getloginuserinfo($sessionId); my $userId = $userInfo{"id"}; my $nickname = $userInfo{"nickname"}; $nickname = encode("utf-8", $nickname); my $mysql = Net::MySQL->new( hostname => '127.0.0.1', port => '3306', database => 'my_bbs', user => 'root', password => '123456' ); $mysql->query("SET NAMES 'utf8mb4'"); $mysql->query("update content set title='".$title."',content='".$content."',userId=".$userId.",userNickename='".$nickname."' where id=".$id." and userId=".$userId); my $res_data = {'code' => 0, 'msg' => '', 'data' => ''}; encode_json($res_data); }; get '/post/delete' => sub { headers 'Content-type' => 'text/html; charset=utf-8', 'Server' => 'perl-limper'; my $id = getmyparam('id'); my $sessionId = getmyparam('sessionId'); my %userInfo = getloginuserinfo($sessionId); my $userId = $userInfo{"id"}; my $nickname = $userInfo{"nickname"}; $nickname = encode("utf-8", $nickname); my $mysql = Net::MySQL->new( hostname => '127.0.0.1', port => '3306', database => 'my_bbs', user => 'root', password => '123456' ); $mysql->query("SET NAMES 'utf8mb4'"); $mysql->query("update content set isDel=1 where id=".$id." and userId=".$userId); my $res_data = {'code' => 0, 'msg' => '', 'data' => ''}; encode_json($res_data); }; get '/reply/list' => sub { headers 'Content-type' => 'text/html; charset=utf-8', 'Server' => 'perl-limper'; my $page = int(getmyparam('page')); my $contentId = getmyparam('contentId'); if(!$page){ $page = 1; } my $start = ($page - 1) * $pagesize; my $mysql = Net::MySQL->new( hostname => '127.0.0.1', port => '3306', database => 'my_bbs', user => 'root', password => '123456' ); $mysql->query("SET NAMES 'utf8mb4'"); my $addsql = " isDel=0 and contentId=".$contentId." "; $mysql->query("SELECT count(1) as count FROM reply where ".$addsql); my $record_set = $mysql->create_record_iterator; my $count = 0; while (my $ref = $record_set->each) { $count = $ref->[0]; } my $totalpage = int(ceil($count / $pagesize)); $mysql->query("SELECT id,content,replyUserId,replyUserNickename,addTime FROM reply where ".$addsql." order by id asc limit ".$start.",".$pagesize); $record_set = $mysql->create_record_iterator; my @post_lists = (); while (my $ref = $record_set->each) { $ref->[1] = decode("utf-8", $ref->[1]); $ref->[3] = decode("utf-8", $ref->[3]); $ref->[4] = decode("utf-8", $ref->[4]); push(@post_lists, {"id" => $ref->[0], "content" => $ref->[1], "replyUserId" => $ref->[2], "replyUserNickename" => $ref->[3], "addTime" => $ref->[4]}) } my $res_data = {'code' => 0, 'msg' => '', 'data' => {'totalpage' => $totalpage, 'data' => \@post_lists}}; encode_json($res_data); }; get '/reply/detail' => sub { headers 'Content-type' => 'text/html; charset=utf-8', 'Server' => 'perl-limper'; my $id = getmyparam('id'); my $mysql = Net::MySQL->new( hostname => '127.0.0.1', port => '3306', database => 'my_bbs', user => 'root', password => '123456' ); $mysql->query("SET NAMES 'utf8mb4'"); $mysql->query("SELECT id,content,replyUserId,replyUserNickename,addTime FROM reply where id='".$id."'"); my $record_set = $mysql->create_record_iterator; my %row = (); while (my $ref = $record_set->each) { $ref->[1] = decode("utf-8", $ref->[1]); $ref->[3] = decode("utf-8", $ref->[3]); $ref->[4] = decode("utf-8", $ref->[4]); $row{"id"} = $ref->[0]; $row{"content"} = $ref->[1]; $row{"replyUserId"} = $ref->[2]; $row{"replyUserNickename"} = $ref->[3]; $row{"addTime"} = $ref->[4]; } my $res_data = {'code' => 0, 'msg' => '', 'data' => \%row}; encode_json($res_data); }; get '/reply/add' => sub { headers 'Content-type' => 'text/html; charset=utf-8', 'Server' => 'perl-limper'; my $contentId = getmyparam('contentId'); my $content = uri_unescape(getmyparam('content')); my $sessionId = getmyparam('sessionId'); my %userInfo = getloginuserinfo($sessionId); my $userId = $userInfo{"id"}; my $nickname = $userInfo{"nickname"}; $nickname = encode("utf-8", $nickname); my $mysql = Net::MySQL->new( hostname => '127.0.0.1', port => '3306', database => 'my_bbs', user => 'root', password => '123456' ); $mysql->query("SET NAMES 'utf8mb4'"); $mysql->query("update content set replyNum=replyNum+1 where id=".$contentId); $mysql->query("insert into reply(contentId, content, replyUserId, replyUserNickename) value(".$contentId.", '".$content."', ".$userId.", '".$nickname."')"); my $insertid = $mysql->get_insert_id(); my $res_data = {'code' => 0, 'msg' => '', 'data' => $insertid}; encode_json($res_data); }; get '/reply/edit' => sub { headers 'Content-type' => 'text/html; charset=utf-8', 'Server' => 'perl-limper'; my $id = getmyparam('id'); my $content = uri_unescape(getmyparam('content')); my $sessionId = getmyparam('sessionId'); my %userInfo = getloginuserinfo($sessionId); my $userId = $userInfo{"id"}; my $nickname = $userInfo{"nickname"}; $nickname = encode("utf-8", $nickname); my $mysql = Net::MySQL->new( hostname => '127.0.0.1', port => '3306', database => 'my_bbs', user => 'root', password => '123456' ); $mysql->query("SET NAMES 'utf8mb4'"); $mysql->query("update reply set content='".$content."',replyUserId=".$userId.",replyUserNickename='".$nickname."' where id=".$id." and replyUserId=".$userId); my $res_data = {'code' => 0, 'msg' => '', 'data' => ''}; encode_json($res_data); }; get '/reply/delete' => sub { headers 'Content-type' => 'text/html; charset=utf-8', 'Server' => 'perl-limper'; my $id = getmyparam('id'); my $sessionId = getmyparam('sessionId'); my %userInfo = getloginuserinfo($sessionId); my $userId = $userInfo{"id"}; my $nickname = $userInfo{"nickname"}; $nickname = encode("utf-8", $nickname); my $mysql = Net::MySQL->new( hostname => '127.0.0.1', port => '3306', database => 'my_bbs', user => 'root', password => '123456' ); $mysql->query("SET NAMES 'utf8mb4'"); $mysql->query("SELECT id,content,replyUserId,replyUserNickename,addTime,contentId FROM reply where id='".$id."'"); my $record_set = $mysql->create_record_iterator; my %row = (); while (my $ref = $record_set->each) { $ref->[1] = decode("utf-8", $ref->[1]); $ref->[3] = decode("utf-8", $ref->[3]); $ref->[4] = decode("utf-8", $ref->[4]); $row{"id"} = $ref->[0]; $row{"content"} = $ref->[1]; $row{"replyUserId"} = $ref->[2]; $row{"replyUserNickename"} = $ref->[3]; $row{"addTime"} = $ref->[4]; $row{"contentId"} = $ref->[5]; } $mysql->query("update content set replyNum=replyNum-1 where id=".$row{"contentId"}); $mysql->query("update reply set isDel=1 where id=".$id." and replyUserId=".$userId); my $res_data = {'code' => 0, 'msg' => '', 'data' => ''}; encode_json($res_data); }; print "start perl-limper at http://127.0.0.1:1099\n"; limp({}, LocalAddr => '0.0.0.0', LocalPort => 1099);
输出:
D:\workspace\studys\study_bbs>D:\software\Strawberry\perl\bin\perl.exe D:\workspace\studys\study_bbs\start_web_limper.pl start perl-limper at http://127.0.0.1:1099 2024-09-02 14:19:40 limper started
本文来自博客园,作者:河北大学-徐小波,转载请注明原文链接:https://www.cnblogs.com/xuxiaobo/p/18392634