我收到一个错误,请求被服务器拒绝MapQuest



我正试图在我的nodeJS应用程序中使用mapquest api,但它给了我这个错误:

OperationalError: Status is REQUEST_DENIED. You must use an API key to authenticate each request to Google Maps Platform APIs. For additional information, please refer to http://g.co/dev/maps-no-account

以下是型号:

const geocoder = require('../utils/geocoder');
BootcampSchema.pre('save', async function(next) {
const loc = await geocoder.geocode(this.address);
this.location = {
type: 'Point',
coordinates: [loc[0].longitude, loc[0].latitude],
formattedAddress: loc[0].formattedAddress,
street: loc[0].streetName,
city: loc[0].city,
state: loc[0].stateCode,
zipcode: loc[0].zipcode,
country: loc[0].countryCode
};
// Do not save address in DB
this.address = undefined;
next();
});

地理编码器实用程序:

const nodeGeoCoder = require('node-geocoder');
const options = {
provider: process.env.GEOCODER_PROVIDER,
httpAdapter: 'https',
apiKey: process.env.GEOCODER_API_KEY,
formatter: null
};
const geocoder = nodeGeoCoder(options);
module.exports = geocoder;

API密钥在单独的.env文件中定义。

我该如何解决这个问题?

您需要在sever.js文件中路由之前调用dotenv。

请遵循以下步骤:

dotenv.config({ path: './config/config.env' });
const bootcamps = require('./routes/bootcamps');

错误消息显示,"谷歌地图平台API";,这不是MapQuest。如果有MapQuest错误,我可以提供帮助,但这不是MapQuest API错误消息。您可能想要将MapQuest标签切换为Google标签。我希望这有助于指明正确的方向。

看起来问题出在Env变量上。也有类似的问题。只需使用geocoder.js本身中的值,如下所示。它对我有效。

我创建了一个单独的文件,然后导入,它也能正常工作。所以问题出在流程上。env

const选项={provider:"mapquest",httpAdapter:"http",apiKey:"YOUR_API_KEY",格式化程序:null}

问题是在配置dotenv包时,在server.js或index.js文件中,您必须在路由之前调用env变量的路径,因此在server.jss的顶部直接调用dotenv并配置如下路径:

require('dotenv').config({ path: './config/config.env' });

很抱歉迟到了,但我希望对你有所帮助。

几个建议

  1. 检查提供商
  2. 确保在加载.env文件后需要路由欢呼