如何在React Native中使用Node / npm(oxford)api?

时间:2019-01-02 15:07:14

标签: node.js react-native

我试图在react-native中使用npm oxford-dictionary api,我安装了 “ npm install oxford-dictioary”并在终端上将其作为“ node app.js”运行,并且运行良好,但是,当我尝试在React Native中使用它不起作用时,有人可以帮助我这是什么问题。是否可以只使用react-native完全使用此api,否则我将不得不使用nodejs构建后端?

//我在终端上运行的app.js var Dictionary = require(“ oxford-dictionary”);

      var config = {
        app_id : "76bc4615",
        app_key : "47fc3b63439737ee971397e905133f47",
        source_lang : "en"
      };

      var dict = new Dictionary(config);

        var props = {
  word: "stupendous",
       };


  var oxfordApi = {
   getRovers(){
    var lookup = dict.synonyms(props);
    return fetch(lookup).then((res) => res.json());
  }
  }

//反应本机代码

      import React from 'react';
      import { StyleSheet, Text, View } from 'react-native';
      //import oxfordApi from './oxfordApi';
      import globals from 'node-libs-react-native/globals';
           var Dictionary = require("oxford-dictionary");  
           var config = {
           app_id : "-------",
           app_key : "--------------------------",
        source_lang : "en"
      };

       export default class App extends React.Component {


     constructor(props) {
      super(props);
       this.state = {
         rovers: []
          }
        }

     componentWillMount() {
     var dict = new Dictionary(config);
      var lookup = dict.find("awesome");

       lookup.then((res) => {
         this.setState({
           rovers: res.rovers
           })
          });
          }

        render() {
        console.log("Rovers: ", this.state.rovers);
         return (
           <View style={styles.container}>
          <Text>Hello wordl</Text>
          </View>
           );
         }
             }

       const styles = StyleSheet.create({
      container: {
       flex: 1,
           backgroundColor: '#fff',
          alignItems: 'center',
          justifyContent: 'center',
            },
            });

//结果当我运行“ run npm ios”

“ node_modules / oxford-dictionary / index.js”中的软件包试图导入Node标准库模块“ https”。它失败了,因为React Native不包括Node标准库。在https://docs.expo.io/versions/latest/introduction/faq.html#can-i-use-nodejs-packages-with-expo

中了解更多信息

1 个答案:

答案 0 :(得分:1)

很遗憾,由于您已经正确地确定了您的身份,因此无法将npm软件包与react-native一起使用,因为它没有https模块。

但是,查看package oxford-dictionary是一个文件,它提供了一些辅助方法来构造对牛津词典api的特定网络请求。

fetch重写它们并创建自己的帮助文件并不难。您甚至可以为牛津词典api创建自己的react-native软件包并将其发布到npm。

关于访问牛津词典的api,这样做应该没有问题,因为它只是网络请求。 fetch应该能够应付。您只是无法使用oxford-dictionary npm软件包发出请求。