ng8 go管理

一、angular

1、总目录
在这里插入图片描述
2、代码

manage.comment.html

<div class="friends">
    <div class="friendword">
        Pagge~hello,
        <button>
            <a [routerLink]="['/friends', userid]">返回</a>
        </button>
    </div>
    <div class="friendlist">
         <div *ngFor="let users of userlist index as i"  class="friendlist-one"  >
            <hr>
            
            <dl>
                <dt>用户名:
                    <input type="text"  [(ngModel)]="upname[i]"  placeholder="{{users.userfriendname}}" >
                </dt>
                <dt>手机号:
                    <input type="text"   [(ngModel)]="upphone[i]"   placeholder="{{users.userfriendphone}}">
                </dt>
                <dt>  邮箱  :
                    <input type="text"   [(ngModel)]="upmail[i]"  placeholder="{{users.userfriendmail}}">
                </dt>
                <dt>  密码  :
                    <input type="text"    [(ngModel)]="uppassword[i]"  placeholder="{{users.userfriendpassword}}">
                </dt>
            </dl>
            <!-- {{setvalue(i, users.userfriendname, users.userfriendphone, users.userfriendmail, users.userfriendpassword)}} -->
            <button  (click)="userdelete(users.userfriendid)">
                删除该用户
            </button>
            <button  (click)="userupdate(i, users.userfriendid)">
                确认修改
            </button>
        </div>
            <!-- </a> -->
        <hr>
        <div>
            <dl>
                <dt>用户名:
                    <input type="text" placeholder="由数字,字母,下划线组成的10位字符" [(ngModel)]="newname" >
                </dt>
                <dt>手机号:
                    <input type="text" placeholder="中国大陆手机号" [(ngModel)]="newphone" >
                </dt>
                <dt>  邮箱  :
                    <input type="text" placeholder="***@域名" [(ngModel)]="newmail" >
                </dt>
                <dt>  密码  :
                    <input type="text" placeholder=""  [(ngModel)]="newpassword" >
                </dt>
            </dl>
            <button (click)="newuser()">
                创建该用户
            </button>
        </div>
    </div>
</div>

manage.comment.scss

h2{

    text-align: left;

}

.friends{

    width: 440px;

    height: 550px;

    margin: 100px auto;

    background-color: #ffffff42;

    padding: 15px;

    border: 1px solid #0066da;

    img{

        // max-width:100px;

        max-width:50px;

    }

}

button{

    width: 83px;

    height: 26px;

    float: right;

    margin: 4px;

}

.friendword{

    font-size: 25px;

    font-weight: bold;

    width: 423px;

    height: 48px;

    padding: 7px;

    border: 1px solid #ffffff;

    background-color: #ffffff;

}

  

.friendlist{

    width: 394px;

    height: 417px;

    background-color: #fefeff;

    padding: 15px;

    border: 1px solid #15070736;

    margin: 13px 5px 0px 6px;

    overflow: scroll;

    overflow-x: hidden;

}

.friendlist-one{

    width: 370px;

    height: 220px;

}

dt{

    margin: 4px 0px 4px 0px;

}

manage.comment.ts

import { Component, OnInit } from '@angular/core';
import { CommonService } from '../../services/common.service';
import { ActivatedRoute } from '@angular/router';
// import {ChangeDetectorRef, ChangeDetectionStrategy } from '@angular/core';

@Component({
  selector: 'app-manage',
  templateUrl: './manage.component.html',
  styleUrls: ['./manage.component.scss'],
})
export class ManageComponent implements OnInit {

  constructor(//public changeDetectorRef:ChangeDetectorRef,
                          public route:ActivatedRoute,
                          public common:CommonService) {
  }

  public userlist:any[]=[];
  public userid:any=""
  ngOnInit() {
    this.route.params.subscribe((value:any)=>{
      this.userid=value.id
      this.userShowfriends(value.id)
    })
  }

  userShowfriends(id){
    this.common.show(id).then((Response:any)=>{
      console.log(Response);
      if(Response.status==-1){
          alert("获取用户列表失败")
          return
      }
      this.userlist = Response.userfriendList
    })
    return
  }

  userdelete(fid){
    if(fid==this.userid){
      alert("错误,不能删除自己")
      return
    }
    this.common.delete(fid).then((Response:any)=>{
      console.log(Response);
      if(Response.status==0){
        // this.link="['/friends?id="+Response.id+"']"
        alert("已删除该用户以及相关聊天记录")
      }else{
        alert("删除失败 : "+Response.msg)
      }
    })
    window.location.reload()

    // this.changeDetectorRef.markForCheck();
    // this.changeDetectorRef.detectChanges();
    return 
  }

  public newname=""
  public newphone=""
  public newmail=""
  public newpassword=""
  newuser(){
    this.common.register(this.newname, this.newphone, this.newmail, this.newpassword).then((Response:any)=>{
      console.log(Response);
      if(Response.status==0){
        alert("添加用户成功")
      }else{
        alert("添加用户失败:"+Response.msg)
      }
    })
    window.location.reload()
    // this.changeDetectorRef.markForCheck();
    // this.changeDetectorRef.detectChanges();
  }
  

  public upname:any=[]
  public upphone:any=[]
  public upmail:any=[]
  public uppassword:any=[]
  setvalue(i, dname, dphone, dmail, dpassword){
    this.upname[i]=dname
    this.upphone[i]=dphone
    this.upmail[i]=dmail
    this.uppassword[i]=dpassword
  }
  userupdate(i, fid){
    console.log("i : "+i)
    this.common.update(this.upname[i], this.upphone[i], this.upmail[i], this.uppassword[i], fid).then((Response:any)=>{
      console.log(Response);
      if(Response.status==0){
        alert("更新成功")
      }else{
        alert("更新失败:"+Response.msg)
        return
      }
    })
    window.location.reload()
  }

  
}

app.module.ts

comment.service.ts

参考博文 《 ng8 go 图片&聊天》

3、运行效果
在这里插入图片描述

4、bug

本页面未实现轮询。

二、golang

1、总目录
(数据库为 postgresql)
在这里插入图片描述
2、代码

friendgetchadel.go

package servewr

import (
	"encoding/json"
	"fmt"
	"io/ioutil"
	"log"
	"net/http"

	// 使用相对路径引用dbtable
	"../dbtable"
)

// ShowResp show接口的响应
type ShowResp struct {
	Status         int                      `json:"status"`
	UserfriendList []dbtable.UserfriendList `json:"userfriendList"` // 消息列表
}

// Show 好友列表接口的处理函数
func Show(w http.ResponseWriter, r *http.Request) {
	w.Header().Set("Access-Control-Allow-Origin", "*")                          //允许访问所有域
	w.Header().Add("Access-Control-Allow-Headers", "Content-TypeAuthorization") //header的类型
	w.Header().Set("content-type", "application/json")

	// 只处理POST请求
	if r.Method != "POST" {
		return
	}

	resp := ShowResp{}

	// 读取请求实体中的数据
	body, err := ioutil.ReadAll(r.Body)
	if err != nil {
		log.Printf("read http request failed, err: %v", err)
		sendErrToClient(err.Error(), w)
		return
	}

	if body == nil || len(body) == 0 {
		log.Println("http request body is null")
		sendErrToClient("http request body is null", w)
		return
	}

	defer r.Body.Close()

	data := make(map[string]interface{})

	// json反序列化请求实体中的数据
	if err = json.Unmarshal(body, &data); err != nil {
		log.Printf("json unmarshal failed, err: %v", err)
		sendErrToClient(err.Error(), w)
		return
	}

	if data == nil {
		log.Println("json unmarshal data is null")
		sendErrToClient("json unmarshal data is null", w)
		return
	}

	// 类型断言
	userid, ok := data["userid"].(string)
	if !ok {
		log.Println("type assert failed")
		sendErrToClient("type assert failed", w)
		return
	}

	if userid == "" {
		log.Println("the userid from http request is empty string")
		sendErrToClient("the userid from http request is empty string", w)
		return
	}

	// 根据id从数据库读取好友列表
	userfriendList, err := dbtable.GetUserfriendList(userid)
	if err != nil {
		log.Printf("getfriend list failed, err: %v", err)
		sendErrToClient(err.Error(), w)
		return
	}

	resp.Status = 0
	resp.UserfriendList = userfriendList

	for _, v := range userfriendList {
		fmt.Printf("name: %s,  phone:%s ,  mail: %s ,  password:%s\n", v.Userfriendname, v.Userfriendphone, v.Userfriendmail, v.Userfriendpassword)
	}

	// json序列化receive接口的响应
	respByte, err := json.Marshal(resp)
	if err != nil {
		log.Printf("json marshal failed, err: %v", err)
		sendErrToClient(err.Error(), w)
		return
	}

	// 响应数据
	_, err = w.Write(respByte)
	if err != nil {
		log.Printf("write response failed, err: %v", err)
		sendErrToClient(err.Error(), w)
		return
	}
}

//DeleteResp  delete接口的响应
type DeleteResp struct {
	Status int `json:"status"`
}

//Delete  删除用户接口处理函数
func Delete(w http.ResponseWriter, r *http.Request) {
	w.Header().Set("Access-Control-Allow-Origin", "*")                          //允许访问所有域
	w.Header().Add("Access-Control-Allow-Headers", "Content-TypeAuthorization") //header的类型
	w.Header().Set("content-type", "application/json")
	// 如果请求类型不是POST, 不处理该请求
	if r.Method != "POST" {
		return
	}

	resp := &DeleteResp{
		Status: 0,
	}
	// 读取请求实体中的数据
	body, err := ioutil.ReadAll(r.Body)
	if err != nil {
		log.Printf("read http request failed, err: %v", err)
		sendErrToClient(err.Error(), w)
		return
	}

	if body == nil || len(body) == 0 {
		log.Println("http request body is null")
		sendErrToClient("http request body is null", w)
		return
	}

	defer r.Body.Close()

	data := make(map[string]interface{})

	// json反序列化请求的数据
	if err = json.Unmarshal(body, &data); err != nil {
		log.Printf("json unmarshal failed, err: %v", err)
		sendErrToClient(err.Error(), w)
		return
	}

	// 类型断言
	userfriendid, ok := data["userfriendid"].(string)
	if !ok {
		log.Println("type assertion failed")
		sendErrToClient("type assertion failed", w)
		return
	}

	if userfriendid == "" {
		log.Println("the userfriendid  is empty string")
		sendErrToClient("the userfriendid is empty string", w)
		return
	}

	err = dbtable.DeleteUserFromDB(userfriendid)
	if err != nil {
		log.Printf("Delete  User  From  DB failed, err: %v", err)
		sendErrToClient(err.Error(), w)
		return
	}

	// 返回成功状态码0
	resp.Status = 0

	// json序列化login接口的响应
	respByte, err := json.Marshal(resp)
	if err != nil {
		log.Printf("json marshal failed, err: %v", err)
		sendErrToClient(err.Error(), w)
		return
	}

	// 响应数据
	_, err = w.Write(respByte)
	if err != nil {
		log.Printf("write the response failed, err: %v", err)
		sendErrToClient(err.Error(), w)
		return
	}

	return
}

//UpdateResp  update接口的响应
type UpdateResp struct {
	Status int `json:"status"`
}

// Update 更新接口
func Update(w http.ResponseWriter, r *http.Request) {
	w.Header().Set("Access-Control-Allow-Origin", "*")                          //允许访问所有域
	w.Header().Add("Access-Control-Allow-Headers", "Content-TypeAuthorization") //header的类型
	w.Header().Set("content-type", "application/json")
	// 如果请求类型不是POST, 不处理该请求
	if r.Method != "POST" {
		return
	}

	resp := &UpdateResp{
		Status: 0,
	}
	// 读取请求实体中的数据
	body, err := ioutil.ReadAll(r.Body)
	if err != nil {
		log.Printf("read http request failed, err: %v", err)
		sendErrToClient(err.Error(), w)
		return
	}

	if body == nil || len(body) == 0 {
		log.Println("http request body is null")
		sendErrToClient("http request body is null", w)
		return
	}

	defer r.Body.Close()

	data := make(map[string]interface{})

	// json反序列化请求的数据
	if err = json.Unmarshal(body, &data); err != nil {
		log.Printf("json unmarshal failed, err: %v", err)
		sendErrToClient(err.Error(), w)
		return
	}

	// 类型断言
	username, ok := data["username"].(string)
	// if !ok {
	//     log.Println("type assertion failed")
	//     sendErrToClient("type assertion failed", w)
	//     return
	// }
	userphone, ok := data["userphone"].(string)
	// if !ok {
	//     log.Println("type assertion failed")
	//     sendErrToClient("type assertion failed", w)
	//     return
	// }
	usermail, ok := data["usermail"].(string)
	// if !ok {
	//     log.Println("type assertion failed")
	//     sendErrToClient("type assertion failed", w)
	//     return
	// }
	password, ok := data["password"].(string)
	// if !ok {
	//     log.Println("type assertion failed")
	//     sendErrToClient("type assertion failed", w)
	//     return
	// }

	userfriendid, ok := data["userfriendid"].(string)
	if !ok {
		log.Println("type assertion failed")
		sendErrToClient("type assertion failed", w)
		return
	}

	err = dbtable.UpdateUserInfo(username, userphone, usermail, password, userfriendid)
	if err != nil {
		log.Println(err)
		x := fmt.Sprintf("%s", err)
		sendErrToClient(x, w)
		return
	}

	// 返回成功状态码0
	resp.Status = 0

	// json序列化register接口的响应
	respByte, err := json.Marshal(resp)
	if err != nil {
		log.Printf("json marshal failed, err: %v", err)
		sendErrToClient(err.Error(), w)
		return
	}

	// 响应数据
	_, err = w.Write(respByte)
	if err != nil {
		log.Printf("write the response failed, err: %v", err)
		sendErrToClient(err.Error(), w)
		return
	}

	return
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值