美文网首页Hprose
Golang+Nodejs前后端开发分离示例

Golang+Nodejs前后端开发分离示例

作者: 关爱单身狗成长协会 | 来源:发表于2017-02-17 18:07 被阅读1487次

    一直想看看前后端分离是什么样的感觉,所以就试试看了,因为java感觉有点麻烦,就用了go语言来代替后端。
    原理:
    当浏览器请求访问数据时将数据提交到nodejs写的服务器中,nodejs将数据解析处理后发送给Golang写的后台服务器(请求协议可自定义),Golang写的后台服务器主要是数据库方面操作,操作完成后将数据发送给nodejs服务器,然后nodejs服务器将数据或页面渲染出来。

    0.准备工作

    1.Go语言开发环境(我go语言的编辑器是IntelliJ IDEA)
    2.nodejs开发环境(我nodejs的编辑器是vs code)
    3.分别安装 golang和nodejs版hprose插件

    资料参考:
    hprose官网
    Hprose for Golang 用户手册
    Hprose for Node.js 用户手册
    koajs官网
    koa中文文档
    koa官网示例

    1.后台服务器编写

    代码:

    package main
    
    import (
        "github.com/hprose/hprose-golang/rpc"//<===hprose
        "fmt"
        "database/sql"
        _ "github.com/go-sql-driver/mysql"//<===mysql驱动
        "log"
    )
    
    
    func checkErr(err error) {
        if err != nil {
            panic(err)
        }
    }
    func mysqlTestConnect(str string) string{//数据库查询
        fmt.Print(str)
        db, err := sql.Open("mysql", "root:换成你数据库的密码@tcp(localhost:3306)/test")
        if err != nil {
            log.Fatalf("Open database error: %s\n", err)
        }
        defer db.Close()
        err = db.Ping()
        checkErr(err)
        rows, err := db.Query("SELECT * FROM t_test")
        checkErr(err)
        var tmp string=""
        for rows.Next() {
            var id int
            var name string
            rows.Columns()
            err = rows.Scan(&id, &name)
            checkErr(err)
            tmp=tmp+"id:"+string(id)+"  name:"+name+"<br/>"
        }
        return  tmp
    }
    func main(){
        server := rpc.NewTCPServer("tcp4://0.0.0.0:10010/")//创建服务具体
        server.AddFunction("客户端调用函数名", mysqlTestConnect)//添加访问函数
        server.Start()//启动
    }
    

    2.前台服务器编写

    代码:

    const koa = require('koa');//这里以koa 框架为例
    const app = new koa();
    var hprose = require("hprose");//hprose
    var client = hprose.Client.create("tcp4://127.0.0.1:10010/", ['客户端调用函数名']);//创建客户端连接
    app.use(function* () {
        var dt= yield new Promise(function (resolve) {
            client.客户端调用函数名("请求参数", function (result) {
                resolve(result);
            })
        });
        this.type = 'text/html;charset=utf-8';
        this.body = dt;
    });
    
    app.listen(3000);
    

    3.效果

    浏览器访问127.0.0.1:3000地址


    效果

    相关文章

      网友评论

        本文标题:Golang+Nodejs前后端开发分离示例

        本文链接:https://www.haomeiwen.com/subject/yjplwttx.html