javascript - 如何使用 fetch 而不是 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(snack) 中运行时,它可以正常工作。但是当我尝试构建应用程序时,
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 而不是请求来更改我的代码。我能怎么做?
解决方案
Fetch api 非常易于使用,一些查看文档会让您准备好使用。
至于您的实际代码,我做了一些更新,以便您可以测试 fetch 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 的实现,它基本上是相同的结果。
您的项目取得成功
推荐阅读
- xcode - 是什么导致了这个问题?类 AMSupportURLConnectionDelegate?
- mysql - 显示 show create table 示例的输出
- python - 弹性搜索查询问题,如 Q、术语和术语
- python - 大家好,当我单击标题按钮时,我为每个标题获得了相同的博客
- excel - 如何始终将最新数据记录在第一行?
- google-cloud-platform - 以 GET /“拉”方式从 Google Cloud IoT 设备检索实时数据?
- r - 如何在 colab R 中运行 plotly 库
- java - 使用 Lombok 和 Spring 注解装饰 Bean
- html - 无法在角度模板中绑定对象属性
- c++ - 从链接列表中删除循环会导致段错误