繁体   English   中英

如何使用 fetch 而不是 request?

[英]How can I use fetch instead of request?

我正在制作 react-native 应用程序,它显示有关我们学校的信息。 我在谷歌电子表格中写了信息,并让我的应用程序按请求和要求抓取它。

var date = new Date()
var year = date.getFullYear()
var month = new String(date.getMonth() + 1)
var day = new String(date.getDate())

if (month.length == 1) {
  month = "0" + month
}

if (day.length == 1) {
  day = "0" + day
}

const today = (year + month + day)

// arrays to save each information
var breakfast = [];
var lunch = [];
var dinner = [];
var quote = [];


var request = require('request');
//get information from google spreadsheet
request('https://script.google.com/macros/s/AKfycbzwGjC5GU3RK448VeJtGm6xXpf_UzFgps3zi5bv9gfQcfsOervJ6RYinWFi-UzGbNMg/exec?sheetName=%EC%8B%9C%ED%8A%B81', function (err, res, body) {
// get information in body tag by json form
  var dataArray = JSON.parse(body)
  for (let i = 0; i < dataArray.data.length; i++) {
// find today's information
    if (String(dataArray.data[i].gdate) == today) {
      breakfast = dataArray.data[i].gbreakfast.split(',')    
      console.log(breakfast)  
      lunch = dataArray.data[i].glunch.split(',')
      dinner = dataArray.data[i].gdinner.split(',')
      quote = "\"" + dataArray.data[i].gquote + "\""
      break
    }
  }
});

在 expo web(小吃)中运行时,它可以正常工作。 但是当我尝试构建应用程序时,

Unable to resolve module crypto from C:\Users\munge\SEMA\node_modules\request\lib\helpers.js: crypto could not be found within the project or in these directories:
  node_modules\request\node_modules
  node_modules
  ..\node_modules

If you are sure the module exists, try these steps:
 1. Clear watchman watches: watchman watch-del-all
 2. Delete node_modules and run yarn install
 3. Reset Metro's cache: yarn start --reset-cache
 4. Remove the cache: rm -rf /tmp/metro-*
  2 |
  3 | var jsonSafeStringify = require('json-stringify-safe')
> 4 | var crypto = require('crypto')
    |                       ^
  5 | var Buffer = require('safe-buffer').Buffer
  6 |
  7 | var defer = typeof setImmediate === 'undefined'

发生上述错误。 我猜它是因为请求而发生的,所以我想使用 fetch 而不是请求来更改我的代码。 我能怎么做?

获取 api 非常易于使用,一些查看文档将使您准备好 go。

至于你的实际代码,我做了一些更新,所以你可以测试获取 api,这里是:

 const list = async () => { var date = new Date() var year = date.getFullYear() var month = new String(date.getMonth() + 1) var day = new String(date.getDate()) if (month.length === 1) { month = "0" + month } if (day.length === 1) { day = "0" + day } const today = (year + month + day) // arrays to save each information let breakfast = []; let lunch = []; let dinner = []; let quote = []; try{ //get information from google spreadsheet const response = await fetch('https://script.google.com/macros/s/AKfycbzwGjC5GU3RK448VeJtGm6xXpf_UzFgps3zi5bv9gfQcfsOervJ6RYinWFi-UzGbNMg/exec?sheetName=%EC%8B%9C%ED%8A%B81') if (response.ok) { var dataArray = await response.json() for (let i = 0; i < dataArray.data.length; i++) { // find today's information console.log(dataArray.data[i].gdate) if (String(dataArray.data[i].gdate) === today) { breakfast = dataArray.data[i].gbreakfast.split(',') console.log(breakfast) lunch = dataArray.data[i].glunch.split(',') dinner = dataArray.data[i].gdinner.split(',') quote = "\"" + dataArray.data[i].gquote + "\"" break } } } else { console.log('failed to fetch info') } } catch(e) { console.log('failed to fetch info') } } list()

提醒一下,我在这里使用 fetch 和 async/await,你可能会看到一些使用 Promises 的实现,它基本上是相同的结果。

您的项目取得成功

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM