从 node.js 访问本机应用程序的字段

Posted

技术标签:

【中文标题】从 node.js 访问本机应用程序的字段【英文标题】:Access to fields of native application from node.js 【发布时间】:2021-01-14 19:37:35 【问题描述】:

我有一个原生 android (Java) 移动应用程序,但现在我必须在客户端运行 node.js 服务器。我对所有这些东西都不熟悉,所以我决定使用 Node.js for Mobile Apps (https://code.janeasystems.com/nodejs-mobile) 来运行我的 index.js 文件。 我已经根据说明添加了所有需要的 NDK 人员,到目前为止,在 JS 代码中一切正常:

  const o = 
                serverUrl: process.env.SERVER_URL,
                token: process.env.TOKEN,
             ...
            ;

JS 代码由于某些原因无法看到“.env”文件

NODEJS-MOBILE: path.js:28
throw new TypeError('Path must be a string. Received ' + inspect(path));

即使能够 - java 部分也将无法更新 TOKEN 字段,因为无法写入具有空名称的文件(至少,我没有成功)。

那么,问题是我可以使用哪些工具(本地文件/库/SharedPreferences?)来更新 java 代码中的字段并在 JS 代码中使用它们?

我是非本地开发的新手,所以任何提示都将不胜感激。

【问题讨论】:

“用于移动应用的 Node.js”——很有趣! 【参考方案1】:

解决方案比我想象的要容易。

process.argv 属性返回一个包含命令行的数组 启动 Node.js 进程时传递的参数。

Node.js for Mobile Apps library 允许这样使用它:

  startNodeWithArguments(new String[]"node",
                nodeDir + "/index.js",
                Constants.SERVER_URL,
                Constants.USER_TOKEN,
                ...
        );

然后,在 js 文件中,我们可以像这样得到这个值:

 const o = 
                    serverUrl: process.argv[2],
                    token: process.argv[3],
                    ...
            ;

UPD:

我找到了另一种在没有 .env 文件的情况下使用环境变量的解决方案。 在“startNodeWithArguments()”中可以使用“setenv()”方法。

startNodeWithArguments(JNIEnv *env, jobject, jobjectArray arguments) 

    const char *token = env->GetStringUTFChars((jstring)env->GetObjectArrayElement(arguments, 2), nullptr);

    setenv("TOKEN", token, 1);
...

【讨论】:

以上是关于从 node.js 访问本机应用程序的字段的主要内容,如果未能解决你的问题,请参考以下文章

从 node.js 和 websockets 访问 IPython 命令行

如何在 node.js 和 mongoDB 本机驱动程序上启用调试?

使用适用于 Node JS 的 mongodb 本机驱动程序记录所有查询

node.js获取本机IP地址

如何使用 Node.js 制作多线程应用程序,访问 LevelDB?

Elasticsearch:使用 Filebeat 从 Node.js Web 应用程序提取日志