Javascript 向第三方API发送带有GET请求的标头
我正在尝试构建一个小型的全堆栈应用程序,其中我的前端代码将只与后端交互,后端将调用第三方API获取结果,然后对其执行任何操作。我使用的第三方API需要一个Javascript 向第三方API发送带有GET请求的标头,javascript,node.js,node-fetch,Javascript,Node.js,Node Fetch,我正在尝试构建一个小型的全堆栈应用程序,其中我的前端代码将只与后端交互,后端将调用第三方API获取结果,然后对其执行任何操作。我使用的第三方API需要一个接受,app_id和app_key任何请求的标题 我可以通过Postman直接向我的第三方API发送GET请求,并获取结果,但当我尝试通过我的NodeJS API发送GET请求时,我收到的是状态403。为此,我正在使用节点获取 我使用的API是 下面是我的index.js文件的代码 require('dotenv').config(); co
接受,app_id
和app_key
任何请求的标题
我可以通过Postman直接向我的第三方API发送GET
请求,并获取结果,但当我尝试通过我的NodeJS API发送GET
请求时,我收到的是状态403
。为此,我正在使用节点获取
我使用的API是
下面是我的index.js
文件的代码
require('dotenv').config();
const express = require('express');
const router = require('./routes/router');
const cors = require('cors');
const app = express();
const port = process.env.PORT || '5000';
const host = process.env.HOST || 'localhost';
app.use(cors());
app.use(express.urlencoded({ extended: true }));
app.use(express.json());
app.use(router);
app.listen(port, () => console.log(`server is up and running at http://${host}:${port} `));
这是我的router.js
文件的代码
const express = require('express')
const fetch = require('node-fetch');
const router = express.Router();
const BASE_URL = process.env.BASE_URL;
const fields = 'definitions';
router.get('/', (req, res) => {
res.json({
status: "successfully connected !"
});
});
router.post('/create', (req, res) => {
console.log(req.body);
console.log(req.body.word);
const url = `${BASE_URL}entries/en-gb/${req.body.word}?fields=${fields}&strictMatch=true`;
const newHeaders = {
"Accept": "application/json",
"app_id": process.env.APP_ID,
"app_key": process.env.API_KEY
}
fetch(url, { method: 'GET', headers: { newHeaders } })
.then((results) => {
console.log(results);
}).then(results => {
res.json(results);
}).catch((err) => { console.log(err) });
});
module.exports = router;
以下是我收到的结果
:-
Response {
size: 0,
timeout: 0,
[Symbol(Body internals)]: {
body: PassThrough {
_readableState: [ReadableState],
_events: [Object: null prototype],
_eventsCount: 5,
_maxListeners: undefined,
_writableState: [WritableState],
allowHalfOpen: true,
[Symbol(kCapture)]: false,
[Symbol(kTransformState)]: [Object]
},
disturbed: false,
error: null
},
[Symbol(Response internals)]: {
url: 'https://od-api.oxforddictionaries.com/api/v2/entries/en-gb/swim?fields=definitions&strictMatch=true',
status: 403,
statusText: 'Forbidden',
headers: Headers { [Symbol(map)]: [Object: null prototype] },
counter: 0
}
}
请放心,环境变量
都设置了准确的值
我希望ale能够附加标题
,并向第三方API发送GET
请求,并成功获取结果。此外,我希望能够将这些结果
发送回我的客户
关于我的代码,我有几个问题
在快车路线内使用fetch
是否正确
如果是,为什么会返回状态403
如果没有,正确的方法是什么
这是什么意思
headers:headers{[Symbol(map)]:[Object:null-prototype]},
我是网络开发的新手,所以这个问题对这里的一些老手来说可能很愚蠢,但请帮我解决。我已经阅读了以下资源,但没有一个对我有帮助:-
编辑:
我使用了
app id
和app key
而不是app\u id
和app\u key
,我现在已经纠正了,但问题还没有解决。正如我在评论中提到的,你有一个打字错误:
headers:{newHeaders}
--newHeaders
已经是一个对象,所以使用headers:newHeaders
检查,您将看到头名称应该是app\u id
和app\u key
。您使用了app-id
和app-key
。您好。谢谢你指出这一点。我更正了错误,但响应仍然相同。您说headers:{newHeaders}
,但newHeaders
已经是一个对象。尝试headers:newHeaders
。无论如何,请检查发出的请求。@Leegodard谢谢。这解决了我的问题。在进一步调整代码之后,我现在能够获取数据了。