11、懒人必备20行代码实现全部模板页面自动渲染并接入

一、注册页面的渲染

11、懒人必备20行代码实现全部模板页面自动渲染并接入 - 图1

 

11、懒人必备20行代码实现全部模板页面自动渲染并接入 - 图2

运行发现没有任何问题,能够渲染成功 

思考一下, 现在只是两个页面都这么多代码,那想一想有没有一劳永逸的办法呢? 而且每次运行代码的内容基本上都差不多。 可不可以把这些共同代码抽象提炼出共同的方法里呢?

答案是肯定的,接下来给大家展示一个 万能的模板渲染函数。

11、懒人必备20行代码实现全部模板页面自动渲染并接入 - 图4

 

package main

import (
	"encoding/json"
	"html/template"
	"log"
	"net/http"
)

func userLogin(writer http.ResponseWriter, request *http.Request) {
	//数据库操作
	//逻辑处理
	//restapi json/xml 返回
	//1.获取前端传递的参数
	//mobile,passwd
	//如何获取参数
	//解析参数
	request.ParseForm()
	mobile := request.PostForm.Get("mobile")
	passwd := request.PostForm.Get("passwd")
	loginOk := false
	if mobile == "xxxxxxxxxxx" && passwd == "123456" {
		loginOk = true
	}
	if loginOk {
		//{"id":1,"token":"xx"}
		data := make(map[string]interface{})
		data["id"] = 1
		data["token"] = "test"
		Resp(writer, 0, data, "登录成功")
	} else {
		Resp(writer, -1, nil, "密码不正确")
	}
}
func RegisterView() {
	//把模版解析并且显示出来
	//tpl得到模版的指针
	//ParseGlob 满足这种格式的都可以解析出来 ** 表示目录  * 表示文件
	tpl, err := template.ParseGlob("view/**/*") //filename是模版的相对路径
	//如果报错就不用继续走啦
	if err != nil {
		//直接退出和fmt.Printf不一样
		log.Fatal(err.Error()) //Fatal函数作用,如果模版渲染出错了,这个应用不用往下跑了,直接退出
	}
	for _, v := range tpl.Templates() {
		//参数2 模版的名称是view视图上方define定义的名字
		//参数3 需要往视图传递的数据,不需要nil
		tplname := v.Name()
		//循环注册
		http.HandleFunc(tplname, func(writer http.ResponseWriter, request *http.Request) {
			tpl.ExecuteTemplate(writer, tplname, nil)
		})
	}
}

type H struct {
	Code int         `json:"code"`
	Msg  string      `json:"msg"`
	Data interface{} `json:"data,omitempty"` //omitempty如果为空则不显示
}

func Resp(w http.ResponseWriter, code int, data interface{}, msg string) {
	//设置header 为JSON 默认的text/html,所以特别指出返回的为application/json
	w.Header().Set("Content-Type", "application/json")
	//设置200状态
	w.WriteHeader(http.StatusOK)
	//定义一个结构体
	h := H{
		Code: code,
		Msg:  msg,
		Data: data,
	}
	//将结构体转化成JSON字符串
	ret, err := json.Marshal(h)
	if err != nil {
		log.Println(err.Error())
	}
	//输出
	w.Write([]byte(ret))
}
func main() {
	//把前端请求的格式和封装处理函数进行绑定的标签
	//绑定请求和处理函数
	http.HandleFunc("/user/login", userLogin)
	//1.提供静态资源目录支持
	//http.Handle("/", http.FileServer(http.Dir("."))) //当前目录
	//2.提供指定目录的静态文件支持
	http.Handle("/asset/", http.FileServer(http.Dir("."))) //第一个是格式
	/*
	   //定义可以允许访问的模版 user/login.shtml
	   http.HandleFunc("/user/login.shtml", func(writer http.ResponseWriter, request *http.Request) {
	       //把模版解析并且显示出来
	       //tpl得到模版的指针
	       tpl, err := template.ParseFiles("view/user/login.html") //filename是模版的相对路径
	       if err != nil {
	           //直接退出和fmt.Printf不一样
	           log.Fatal(err.Error()) //Fatal函数作用,如果模版渲染出错了,这个应用不用往下跑了,直接退出
	       }
	       //参数2 模版的名称是view视图上方define定义的名字
	       //参数3 需要往视图传递的数据,不需要nil
	       tpl.ExecuteTemplate(writer, "/user/login.shtml", nil)
	   })
	   //定义可以允许访问的模版 user/register.shtml
	   http.HandleFunc("/user/register.shtml", func(writer http.ResponseWriter, request *http.Request) {
	       //把模版解析并且显示出来
	       //tpl得到模版的指针
	       tpl, err := template.ParseFiles("view/user/register.html") //filename是模版的相对路径
	       if err != nil {
	           //直接退出和fmt.Printf不一样
	           log.Fatal(err.Error()) //Fatal函数作用,如果模版渲染出错了,这个应用不用往下跑了,直接退出
	       }
	       //参数2 模版的名称是view视图上方define定义的名字
	       //参数3 需要往视图传递的数据,不需要nil
	       tpl.ExecuteTemplate(writer, "/user/register.shtml", nil)
	   })
	*/
	RegisterView()
	//启动web服务器
	http.ListenAndServe(":8080", nil)
}

 

新建一个test文件测试一下是否好使,记得重启,后续没有修改main.go的代码,看一下是否可以生效

看到如上效果,说明没有问题,这个就是万能的模板页面自动渲染

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先需要了解懒人听书的API接口的具体实现,以及登录和注册需要传递哪些参数和接口地址。 一般来说,使用Node.js实现登录注册需要以下步骤: 1. 安装相关依赖,例如express、body-parser等; 2. 创建一个express应用,在应用中定义路由; 3. 通过路由向懒人听书API接口发送请求,获取响应数据; 4. 对响应数据进处理,例如保存用户信息、验证用户信息等; 5. 返回处理结果给前端。 以下是一个简单的代码示例: ```javascript const express = require('express'); const bodyParser = require('body-parser'); const fetch = require('node-fetch'); const app = express(); const port = 3000; app.use(bodyParser.urlencoded({ extended: false })); app.post('/register', async (req, res) => { const { username, password } = req.body; const response = await fetch('http://api.lazyaudios.com/registe', { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ api_key: 'YOUR_API_KEY', username, password, }), }); const data = await response.json(); if (data.code === 0) { // 注册成功 res.json({ success: true }); } else { // 注册失败 res.json({ success: false, message: data.msg }); } }); app.post('/login', async (req, res) => { const { username, password } = req.body; const response = await fetch('http://api.lazyaudios.com/login', { method: 'POST', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({ api_key: 'YOUR_API_KEY', username, password, }), }); const data = await response.json(); if (data.code === 0) { // 登录成功 // 保存用户信息等操作 res.json({ success: true }); } else { // 登录失败 res.json({ success: false, message: data.msg }); } }); app.listen(port, () => { console.log(`Server is running on port ${port}.`); }); ``` 注意,上述代码中的`YOUR_API_KEY`需要替换为你在懒人听书API平台上申请的API Key。此外,为了简化代码,上述示例中没有包含用户信息的保存和验证过程,需要根据具体需求进补充。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值