本文介绍了如何在Reaction Native Exp中不使用动态请求访问GUNJS中的SEA模块的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

所以我使用Reaction Native(EXPO)启动了这个新项目,并且我已经导入了包括GunJSSEA在内的所有包,但是,当我运行该应用程序时,我收到错误,Metro不支持Dynamic Required。我检查了sea.js文件,发现devs使用Required(Arg),这是Reaction Native不支持的。这是一件非常令人沮丧的事情,我还没有找到任何解决办法。是否有其他方式访问SEA?

    import GUN from "gun";
    import "gun/sea";
    import { userContext } from "../global";

    export const gun = GUN();

下面的代码片断是sea.js文件,它使用Dynamic Required。


    /* UNBUILD */
      function USE(arg, req){
        return req? require(arg) : arg.slice? USE[R(arg)] : function(mod, path){
          arg(mod = {exports: {}});
          USE[R(path)] = mod.exports;
        }

推荐答案

如果您现在需要在REACT-NATIVE中使用SEA,而无需等待枪社区来解决此问题,请使用NodeJS执行此构建API,并在进入您的REACT-Native应用程序后安装GUN in,调用此接口参见示例:

//nodejs that manage sea so in my case I use auth feature  sea

const fastify = require("fastify")();
const Gun = require('gun'); // in NodeJS
require('./sea/sae');

const gun = new Gun ({
    peers: ['https://gun-serve.herokuapp.com/gun'],

   })

const user = gun.user()
const ADDRESS = "0.0.0.0";
const PORT = process.env.PORT || 3000;
fastify.get("/", function (req, reply) {
   reply.send("wellcome");
});

fastify.post('/userregist', async (request, reply) => {
  try {
  user.create(`${request.body.user}`,`${request.body.password}`, ({ err , pub}) => {
      if (err) {


        return reply.code(200).send({ "err": `${err}`})
      } else {


          return reply.code(200).send({"pub": `${pub}`})

      }
      });
    } catch (error) {
      request.log.error(error);
      return reply.send(500);
  }


})

fastify.post('/userlogin', async (request, reply) => {
  try{
  user.auth(`${request.body.user}`,`${request.body.password}`, ({ err, get,  }) => {
    if (err) {

       return reply.code(200).send({ "err": `${err}`})
    } else {

        console.log('joshau get', get)


        return reply.code(200).send({"pub": `${get}`})

    }
    });
  } catch (error) {
    request.log.error(error);
    return reply.send(500);
}

})

fastify.listen(PORT, ADDRESS, (err, address) => {
  if (err) {
     console.log(err);
     process.exit(1);
  }
});

所以我这样称呼API我的APP:

//my call api
const loginRequest = async (email, password) => {
  try {
    return await fetch('https://locahost:3000/userlogin', {
      mode: 'no-cors', method: 'POST',
      headers: {
        'Content-type': 'application/json',
        'Accept': ' application/json'
      },
      body: JSON.stringify({
            user: email,
            password: password,

      }),
    })
  } catch (error) {
    return error;
  }
};
// here is way i call it i comp
LoginRequest(email, password)
      .then((res)=> {

        res.json().then(function (text) {

          if(text.err){
             LOADING_STOP()

            alert(`${text.err}`)

            console.log('error message',text.err)
          }else{

            console.log('public key',text.pub)


            LOADING_STOP()

            navigation.replace("Dashboard");
          }

      }).catch((e)=> {
         LOADING_STOP()

        alert(e)
      })

这篇关于如何在Reaction Native Exp中不使用动态请求访问GUNJS中的SEA模块的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

05-21 21:46