一个练习项目,好玩的bbs-ruby-busker
1.一个练习项目,好玩的bbs-介绍2.一个练习项目,好玩的bbs-java3.一个练习项目,好玩的bbs-c#4.一个练习项目,好玩的bbs-前端部分5.一个练习项目,好玩的bbs-reactphp6.一个练习项目,好玩的bbs-ruby-sinatra7.一个练习项目,好玩的bbs-ruby-ramaze
8.一个练习项目,好玩的bbs-ruby-busker
9.一个练习项目,好玩的bbs-python-cherrypy10.一个练习项目,好玩的bbs-python-tornado11.一个练习项目,好玩的bbs-python-flask12.一个练习项目,好玩的bbs-python-fastapi13.一个练习项目,好玩的bbs-python-bottle14.一个练习项目,好玩的bbs-python-pyramid15.一个练习项目,好玩的bbs-python-webpy16.一个练习项目,好玩的bbs-go-gin17.一个练习项目,好玩的bbs-go-iris18.一个练习项目,好玩的bbs-go-echo19.一个练习项目,好玩的bbs-go-beego20.一个练习项目,好玩的bbs-go-chi21.一个练习项目,好玩的bbs-perl-mojolicious22.一个练习项目,好玩的bbs-nodejs-fastify23.一个练习项目,好玩的bbs-nodejs-restify24.一个练习项目,好玩的bbs-nodejs-hapi25.一个练习项目,好玩的bbs-nodejs-koa26.一个练习项目,好玩的bbs-nodejs-express27.一个练习项目,好玩的bbs-perl-limper28.一个练习项目,好玩的bbs-perl-dancer代码:
#!ruby #coding=utf-8 require 'busker' require "mysql" require "json" def getloginuserinfo(sessionId = '') conn = Mysql.connect('mysql://root:123456@127.0.0.1:3306/my_bbs?charset=utf8mb4') myinfo = {} items = conn.query("select id,username,nickname,addTime,sessionId from user where sessionId='#{sessionId}'") items.each do |id,username,nickname,addTime,sessionId| myinfo['id'] = id myinfo['username'] = username myinfo['nickname'] = nickname myinfo['addTime'] = addTime.to_s.sub(" +0800", "") myinfo['sessionId'] = sessionId end return myinfo end myBusker = Busker::Busker.new({'port': 1104}) do pagesize = 20 secretKey = 'saacac3423@21212' conn = Mysql.connect('mysql://root:123456@127.0.0.1:3306/my_bbs?charset=utf8mb4') route '/', :GET do |params, request, response| response.content_type = 'text/html; charset=utf-8' response.header['Server'] = "ruby-busker" "此站接口使用ruby-busker实现,<a href='api.html' target='_blank'>接口列表</a>" end route '/user/register', :GET do |params, request, response| response.content_type = 'text/html; charset=utf-8' response.header['Server'] = "ruby-busker" username = params[:username] nickname = params[:nickname] nickname = nickname.force_encoding("UTF-8") password = params[:password] passwordMd5 = Digest::MD5.hexdigest(password) myinfo = {} items = conn.query("select id,username,nickname,addTime from user where username='#{username}'") items.each do |id,username,nickname,addTime| myinfo['id'] = id myinfo['username'] = username myinfo['nickname'] = nickname myinfo['addTime'] = addTime end retdata = {} if myinfo.empty? conn.query("insert into user(username, password, nickname) value('#{username}', '#{passwordMd5}', '#{nickname}')") retdata['code'] = 0 retdata['msg'] = '' retdata['data'] = conn.insert_id else retdata['code'] = 1 retdata['msg'] = '用户名已经存在' retdata['data'] = '' end retdata.to_json end route '/user/login', :GET do |params, request, response| response.content_type = 'text/html; charset=utf-8' response.header['Server'] = "ruby-busker" username = params[:username] password = params[:password] passwordMd5 = Digest::MD5.hexdigest(password) myinfo = {} items = conn.query("select id,username,nickname,addTime from user where username='#{username}' and password='#{passwordMd5}'") items.each do |id,username,nickname,addTime| myinfo['id'] = id myinfo['username'] = username myinfo['nickname'] = nickname myinfo['addTime'] = addTime.to_s.sub(" +0800", "") end retdata = {} if myinfo.empty? retdata['code'] = 1 retdata['msg'] = '用户名或者密码错误' retdata['data'] = '' else sessionId = Digest::MD5.hexdigest(secretKey + myinfo['id'].to_s + myinfo['addTime']) conn.query("update user set sessionId='#{sessionId}' where id=#{myinfo['id']}") myinfo['sessionId'] = sessionId retdata['code'] = 0 retdata['msg'] = '' retdata['data'] = myinfo end retdata.to_json end route '/user/logout', :GET do |params, request, response| response.content_type = 'text/html; charset=utf-8' response.header['Server'] = "ruby-busker" sessionId = params[:sessionId] myinfo = {} items = conn.query("select id,username,nickname,addTime,sessionId from user where sessionId='#{sessionId}'") items.each do |id,username,nickname,addTime,sessionId| myinfo['id'] = id myinfo['username'] = username myinfo['nickname'] = nickname myinfo['addTime'] = addTime myinfo['sessionId'] = sessionId end if myinfo conn.query("update user set sessionId='' where sessionId='#{sessionId}'") myinfo['sessionId'] = '' end retdata = {} retdata['code'] = 0 retdata['msg'] = '' retdata['data'] = myinfo retdata.to_json end route '/user/getuserinfo', :GET do |params, request, response| response.content_type = 'text/html; charset=utf-8' response.header['Server'] = "ruby-busker" sessionId = params[:sessionId] myinfo = {} items = conn.query("select id,username,nickname,addTime,sessionId from user where sessionId='#{sessionId}'") items.each do |id,username,nickname,addTime,sessionId| myinfo['id'] = id myinfo['username'] = username myinfo['nickname'] = nickname myinfo['addTime'] = addTime myinfo['sessionId'] = sessionId end retdata = {} retdata['code'] = 0 retdata['msg'] = '' retdata['data'] = myinfo retdata.to_json end route '/post/list', :GET do |params, request, response| response.content_type = 'text/html; charset=utf-8' response.header['Server'] = "ruby-busker" page = params[:page].to_i keyword = params[:keyword] if page <= 0 page = 1 end addsql = " isDel=0 " if keyword != "" addsql = " isDel=0 and title like '%#{keyword}%' " end start = (page - 1) * pagesize mydata = {} items = conn.query("select count(1) as count from content where #{addsql}") items.each do |count| #mydata['count'] = count[0].to_i mydata['totalpage'] = (count[0].to_f / pagesize).ceil() end mylist = [] items = conn.query("select id,title,userId,userNickename,replyNum,updateTime from content where #{addsql} order by updateTime desc limit #{start},#{pagesize}") items.each do |id,title,userId,userNickename,replyNum,updateTime| myinfo = {} myinfo['id'] = id myinfo['title'] = title myinfo['userId'] = userId myinfo['userNickename'] = userNickename myinfo['replyNum'] = replyNum myinfo['updateTime'] = updateTime.to_s.sub(" +0800", "") mylist.append(myinfo) end mydata['data'] = mylist retdata = {} retdata['code'] = 0 retdata['msg'] = '' retdata['data'] = mydata retdata.to_json end route '/post/detail', :GET do |params, request, response| response.content_type = 'text/html; charset=utf-8' response.header['Server'] = "ruby-busker" id = params[:id].to_i myinfo = {} items = conn.query("select id,title,content,userId,userNickename,replyNum,updateTime from content where isDel=0 and id=#{id}") items.each do |id,title,content,userId,userNickename,replyNum,updateTime| myinfo['id'] = id myinfo['title'] = title myinfo['content'] = content myinfo['userId'] = userId myinfo['userNickename'] = userNickename myinfo['replyNum'] = replyNum myinfo['updateTime'] = updateTime end retdata = {} retdata['code'] = 0 retdata['msg'] = '' retdata['data'] = myinfo retdata.to_json end route '/post/add', :GET do |params, request, response| response.content_type = 'text/html; charset=utf-8' response.header['Server'] = "ruby-busker" title = params[:title] content = params[:content] sessionId = params[:sessionId] userinfo = getloginuserinfo(sessionId) retdata = {} if userinfo.empty? retdata['code'] = 1 retdata['msg'] = '请先登录' retdata['data'] = '' else title = title.force_encoding("UTF-8") content = content.force_encoding("UTF-8") sql = "insert into content(title, content, userId, userNickename) value('#{title}', '#{content}', #{userinfo['id']}, '#{userinfo['nickname']}')" conn.query(sql) retdata['code'] = 0 retdata['msg'] = '' retdata['data'] = conn.insert_id end retdata.to_json end route '/post/edit', :GET do |params, request, response| response.content_type = 'text/html; charset=utf-8' response.header['Server'] = "ruby-busker" id = params[:id].to_i title = params[:title] content = params[:content] sessionId = params[:sessionId] userinfo = getloginuserinfo(sessionId) retdata = {} if userinfo.empty? retdata['code'] = 1 retdata['msg'] = '请先登录' retdata['data'] = '' else title = title.force_encoding("UTF-8") content = content.force_encoding("UTF-8") conn.query("update content set title='#{title}',content='#{content}',userId=#{userinfo['id']},userNickename='#{userinfo['nickname']}' where id=#{id} and userId=#{userinfo['id']}") retdata['code'] = 0 retdata['msg'] = '' retdata['data'] = '' end retdata.to_json end route '/post/delete', :GET do |params, request, response| response.content_type = 'text/html; charset=utf-8' response.header['Server'] = "ruby-busker" id = params[:id].to_i sessionId = params[:sessionId] userinfo = getloginuserinfo(sessionId) retdata = {} if userinfo.empty? retdata['code'] = 1 retdata['msg'] = '请先登录' retdata['data'] = '' else conn.query("update content set isDel=1 where id=#{id} and userId=#{userinfo['id']}") retdata['code'] = 0 retdata['msg'] = '' retdata['data'] = '' end retdata.to_json end route '/reply/list', :GET do |params, request, response| response.content_type = 'text/html; charset=utf-8' response.header['Server'] = "ruby-busker" page = params[:page].to_i contentId = params[:contentId].to_i if page <= 0 page = 1 end start = (page - 1) * pagesize mydata = {} items = conn.query("select count(1) as count from reply where isDel=0 and contentId=#{contentId}") items.each do |count| #mydata['count'] = count[0].to_i mydata['totalpage'] = (count[0].to_f / pagesize).ceil() end mylist = [] items = conn.query("select id,content,replyUserId,replyUserNickename,addTime from reply where isDel=0 and contentId=#{contentId} order by id asc limit #{start},#{pagesize}") items.each do |id,content,replyUserId,replyUserNickename,addTime| myinfo = {} myinfo['id'] = id myinfo['content'] = content myinfo['replyUserId'] = replyUserId myinfo['replyUserNickename'] = replyUserNickename myinfo['addTime'] = addTime mylist.append(myinfo) end mydata['data'] = mylist retdata = {} retdata['code'] = 0 retdata['msg'] = '' retdata['data'] = mydata retdata.to_json end route '/reply/detail', :GET do |params, request, response| response.content_type = 'text/html; charset=utf-8' response.header['Server'] = "ruby-busker" id = params[:id].to_i myinfo = {} items = conn.query("select id,content,replyUserId,replyUserNickename,addTime from reply where isDel=0 and id=#{id}") items.each do |id,content,replyUserId,replyUserNickename,addTime| myinfo['id'] = id myinfo['content'] = content myinfo['replyUserId'] = replyUserId myinfo['replyUserNickename'] = replyUserNickename myinfo['addTime'] = addTime end retdata = {} retdata['code'] = 0 retdata['msg'] = '' retdata['data'] = myinfo retdata.to_json end route '/reply/add', :GET do |params, request, response| response.content_type = 'text/html; charset=utf-8' response.header['Server'] = "ruby-busker" contentId = params[:contentId].to_i content = params[:content] sessionId = params[:sessionId] userinfo = getloginuserinfo(sessionId) retdata = {} if userinfo.empty? retdata['code'] = 1 retdata['msg'] = '请先登录' retdata['data'] = '' else content = content.force_encoding("UTF-8") conn.query("update content set replyNum=replyNum+1 where id=#{contentId}") conn.query("insert into reply(contentId, content, replyUserId, replyUserNickename) value(#{contentId}, '#{content}', #{userinfo['id']}, '#{userinfo['nickname']}')") retdata['code'] = 0 retdata['msg'] = '' retdata['data'] = conn.insert_id end retdata.to_json end route '/reply/edit', :GET do |params, request, response| response.content_type = 'text/html; charset=utf-8' response.header['Server'] = "ruby-busker" id = params[:id].to_i content = params[:content] sessionId = params[:sessionId] userinfo = getloginuserinfo(sessionId) retdata = {} if userinfo.empty? retdata['code'] = 1 retdata['msg'] = '请先登录' retdata['data'] = '' else content = content.force_encoding("UTF-8") conn.query("update reply set content='#{content}',replyUserId=#{userinfo['id']},replyUserNickename='#{userinfo['nickname']}' where id=#{id} and replyUserId=#{userinfo['id']}") retdata['code'] = 0 retdata['msg'] = '' retdata['data'] = '' end retdata.to_json end route '/reply/delete', :GET do |params, request, response| response.content_type = 'text/html; charset=utf-8' response.header['Server'] = "ruby-busker" id = params[:id].to_i sessionId = params[:sessionId] userinfo = getloginuserinfo(sessionId) retdata = {} if userinfo.empty? retdata['code'] = 1 retdata['msg'] = '请先登录' retdata['data'] = '' else myinfo = {} items = conn.query("select id,content,replyUserId,replyUserNickename,addTime,contentId from reply where isDel=0 and id=#{id}") items.each do |id,content,replyUserId,replyUserNickename,addTime,contentId| myinfo['id'] = id myinfo['content'] = content myinfo['replyUserId'] = replyUserId myinfo['replyUserNickename'] = replyUserNickename myinfo['addTime'] = addTime myinfo['contentId'] = contentId end if myinfo.empty? retdata['code'] = 1 retdata['msg'] = '回复不存在' retdata['data'] = '' else conn.query("update content set replyNum=replyNum-1 where id=#{myinfo['contentId']}") conn.query("update reply set isDel=1 where id=#{id} and replyUserId=#{userinfo['id']}") retdata['code'] = 0 retdata['msg'] = '' retdata['data'] = '' end end retdata.to_json end end myBusker.start
输出:
[2024-06-26 11:23:30] INFO WEBrick 1.8.1 [2024-06-26 11:23:30] INFO ruby 2.7.6 (2022-04-12) [x64-mingw32] [2024-06-26 11:23:30] INFO WEBrick::HTTPServer#start: pid=21648 port=1104
本文来自博客园,作者:河北大学-徐小波,转载请注明原文链接:https://www.cnblogs.com/xuxiaobo/p/18268656

合集:
所有后端语言的一个学习项目
分类:
ruby
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步