V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
KevinRed
V2EX  ›  程序员

后端远程调用 js 项目实现方案

  •  
  •   KevinRed · 2020-03-25 18:22:02 +08:00 · 3409 次点击
    这是一个创建于 1702 天前的主题,其中的信息可能已经有所发展或是发生改变。

    欢迎访问原文后端远程调用 js 项目实现方案 -kevin 的博客 欢迎访问原文后端远程调用 js 项目实现方案 -kevin 的博客 欢迎访问原文后端远程调用 js 项目实现方案 -kevin 的博客

    js 运行速度快占用性能小,某些模块独立成 js 方法是很好的选择,可是 js 需要依赖浏览器运行

    这就导致使用接口远程调用 js 方法不能实现,经过一番查找发现了 node 这个大杀器

    下面就来介绍一下如何用后端调用 js 方法获取返回值

    主要思想就是搭建 nodejs 服务器,在 nodejs 项目中引用我们要调用的 js,并格式化返回值为 json 返回

    先要来说说 nodejs,简单介绍如何搭建一个 nodejs 服务器,直接上代码

    这一步需要安装 node,详细可见 node 的安装与使用

    //service.js
    
    var http = require('http');
    var url = require("url");
    var querystring = require("querystring");
    http.createServer(function (request, response) {
    
       response.writeHead(200, {'Content-Type': 'application/json'});
       var arg = url.parse(request.url).query;
    
       var params = querystring.parse(arg);//url 后拼的参数
        
      
      
    }).listen(8000);//监听端口
    
    console.log('hello node');
    

    node service.js 即可运行起来

    没错就是这么简单,后通过 http://127.0.0.1:8000 即可访问

    还能再后边拼参数。如 http://127.0.0.1:8000?param=hello

    接下来就可以改造方法了

    假设有个 js 文件

    //helloNodejs.js
    
    function hello() {
        var data = {'name': 'kevin', 'say' : 'hello nodejs'};
        return JSON.stringify(data);
    }
    

    我们对它稍微改造,让它能被 service.js 调用

    //方案 1
    
    module.exports = (function() {
        var data = {'name': 'kevin', 'say' : 'hello nodejs'};
        return JSON.stringify(data);
    })
    

    对应的 service.js 调用写法

    var helloNodejs = require('./helloNode');
    var result = helloNodejs();
    response.end(result);
    

    此方案适合 js 文件中仅有一个方法,如果有多个看下面

    //方案 2
    
    function hello() {
        var data = {'name': 'kevin', 'say' : 'hello nodejs'};
        return JSON.stringify(data);
    }
    
    exports.hello = hello
    

    对应的 service.js 调用写法

    var helloNodejs = require('./helloNode');
    var result = helloNodejs.hello();
    response.end(result);
    

    看到这是不是想大呼一声 js 牛批呀

    第 1 条附言  ·  2020-03-25 21:27:30 +08:00
    大佬们轻喷啊,小弟搞 Android 的,刚接触 nodejs
    起因是在 github 上发现了一个 js 项目,想用 php 调用,发现写成接口调不通,最后发现必须有浏览器支持,几番搜索找到 nodejs,发现网上很少有介绍如何用 nodejs 调用普通 js 方法的,才写的这个文章
    37 条回复    2020-03-29 10:53:50 +08:00
    ironMan1995
        1
    ironMan1995  
       2020-03-25 18:40:58 +08:00 via Android
    这不就是模块么
    gimp
        2
    gimp  
       2020-03-25 18:42:43 +08:00
    。。。i 了 i 了
    rrfeng
        3
    rrfeng  
       2020-03-25 18:47:58 +08:00
    ????????
    zeromake
        4
    zeromake  
       2020-03-25 18:48:39 +08:00 via Android
    怎么说呢?欢迎回到地球,顺便说个事带 dom 操作 js 在 node 不好运行
    ayase252
        5
    ayase252  
       2020-03-25 18:48:47 +08:00 via iPhone
    ??????
    Hilong
        6
    Hilong  
       2020-03-25 18:49:01 +08:00 via iPhone   ❤️ 1
    牛批,我写了这么多年的 js 才发现原来这么牛批啊
    wangxiaoaer
        7
    wangxiaoaer  
       2020-03-25 18:55:18 +08:00 via Android
    需要铜币就真说啊
    renmu
        8
    renmu  
       2020-03-25 19:09:13 +08:00 via Android
    讲个笑话,js 运行速度快
    oneisall8955
        9
    oneisall8955  
       2020-03-25 19:14:55 +08:00
    好的知道了,调用 node 的 http 请求
    rockjike
        10
    rockjike  
       2020-03-25 20:49:26 +08:00 via Android
    ??
    Xusually
        11
    Xusually  
       2020-03-25 20:54:51 +08:00
    缓慢打出一个问号。。。。。。?
    ben1024
        12
    ben1024  
       2020-03-25 20:55:33 +08:00
    创世主??
    jrtzxh020
        13
    jrtzxh020  
       2020-03-25 21:13:41 +08:00 via iPhone
    ??????现在是 2020 年???
    ardour
        14
    ardour  
       2020-03-25 21:18:01 +08:00
    看到这篇帖子我还以为走错进了 CSDN
    KevinRed
        15
    KevinRed  
    OP
       2020-03-25 21:26:29 +08:00
    @ironMan1995
    @gimp
    @rrfeng
    @zeromake
    @ayase252
    @Hilong
    @wangxiaoaer
    @renmu
    @oneisall8955
    @rockjike
    @Xusually
    @ben1024
    @jrtzxh020
    @ardour

    大佬们轻喷啊,小弟搞 Android 的,刚接触 nodejs
    起因是在 github 上发现了一个 js 项目,想用 php 调用,发现写成接口调不通,最后发现必须有浏览器支持,几番搜索找到 nodejs,发现网上很少有介绍如何用 nodejs 调用普通 js 方法的,才写的这个文章
    catch
        16
    catch  
       2020-03-25 21:29:59 +08:00 via iPhone
    这种文章还是少写吧(像不懂计算机基础的小白),高质量的可以写
    tinkerer
        17
    tinkerer  
       2020-03-25 21:32:14 +08:00
    总之,还是鼓励努力学习的
    xy90321
        18
    xy90321  
       2020-03-25 21:33:23 +08:00 via iPhone
    JDK 8 开始支持的 nashorn 都已经快寿终正寝了…
    哦对了,你不是 JDK…
    zy445566
        19
    zy445566  
       2020-03-25 21:47:41 +08:00 via Android
    不仅仅,nodejs 还能做跨平台的 iOS 和 Android
    KevinRed
        20
    KevinRed  
    OP
       2020-03-25 21:49:07 +08:00
    @zy445566 最近在看 ReactNative,js 确实挺牛的
    ardour
        21
    ardour  
       2020-03-25 21:51:23 +08:00
    @KevinRed 我是前端,我以为学后端的基本都懂 node,最起码懂一点
    zhuzhibin
        22
    zhuzhibin  
       2020-03-25 21:53:21 +08:00
    JS 🐂 🍺 !!!!!!!!!!!!!!! 1
    loading
        23
    loading  
       2020-03-25 21:55:02 +08:00 via Android
    经过一番查找发现了 node 这个大杀器

    看到这句我就知道后面不用看了。
    KevinRed
        24
    KevinRed  
    OP
       2020-03-25 21:59:53 +08:00
    @loading 哈哈哈,博客里已经改了,连标题都改了 [后端远程调用原生 js 方法实现方案]( https://www.wilan.top/index.php/Home/Index/article/aid/84])
    yafoo
        25
    yafoo  
       2020-03-25 22:15:33 +08:00 via Android
    我也是去年才接触了解 nodejs 。

    这个也不能算是后端远程调用 js,应该说是服务器端运行 js 。
    grewer
        26
    grewer  
       2020-03-25 23:53:21 +08:00
    不是... 我以为是个用后端语言写的 js 解释器, 结果...
    ben1024
        27
    ben1024  
       2020-03-26 00:14:38 +08:00
    @KevinRed
    PHP 内运行 JS,试试 PHP [V8 JS]( https://pecl.php.net/package/v8js)
    OHyn
        28
    OHyn  
       2020-03-26 00:25:06 +08:00
    我还以为是 java 写后端+在 linux 上跑一个浏览器+用 java 通过这个浏览器开某个页面,再调这个页面内的 js 方法,并获取返回值。。。。
    zhw2590582
        29
    zhw2590582  
       2020-03-26 08:40:48 +08:00
    3G 网好快
    loliyu
        30
    loliyu  
       2020-03-26 09:03:56 +08:00
    ?
    skymei
        31
    skymei  
       2020-03-26 09:21:52 +08:00
    理解老哥学习到新知识的喜悦,加油
    blackmirror
        32
    blackmirror  
       2020-03-26 09:28:34 +08:00
    我还以为准备开个神贴,原来是 node
    onfuns
        33
    onfuns  
       2020-03-26 10:01:39 +08:00
    看到标题我想着要学习一下怎么在后端代码里跑前端代码,类似 jsbridge,结果进来 ????
    xyjincan
        34
    xyjincan  
       2020-03-26 10:29:05 +08:00
    websocket 大概可以实现后端调用 web 端 js
    jigi330
        35
    jigi330  
       2020-03-26 15:41:36 +08:00
    @loading 哈哈哈哈
    slert
        36
    slert  
       2020-03-26 17:07:02 +08:00
    这里可能没人不知道 node,所以显得有点尴尬。
    siweipancc
        37
    siweipancc  
       2020-03-29 10:53:50 +08:00 via iPhone
    老铁,加油,路还长着呢。
    不瞒你说,前端还可以调用前端,后段可以调用后段呢(´-ω-`)
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5470 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 36ms · UTC 03:29 · PVG 11:29 · LAX 19:29 · JFK 22:29
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.