Получение «Ошибка: не удается найти модуль« запрос »», хотя я добавил модуль запроса - PullRequest
1 голос
/ 11 января 2020

Я пытаюсь использовать request для своей облачной функции.

Я установил request пакет через npm install request. Он находится в node_modules, как и любой другой пакет:

enter image description here

Однако, когда я пытаюсь загрузить свою облачную функцию, я получаю следующее сообщение об ошибке:

Function failed on loading user code. Error message: Code in file index.js can't be loaded.
Did you list all required modules in the package.json dependencies?
Detailed stack trace: Error: Cannot find module 'request'
    at Function.Module._resolveFilename (module.js:548:15)
    at Function.Module._load (module.js:475:25)
    at Module.require (module.js:597:17)
    at require (internal/module.js:11:18)
    at Object.<anonymous> (/srv/index.js:3:17)
    at Module._compile (module.js:653:30)
    at Object.Module._extensions..js (module.js:664:10)
    at Module.load (module.js:566:32)
    at tryModuleLoad (module.js:506:12)
    at Function.Module._load (module.js:498:3)

Вот мой index.js:

const functions = require('firebase-functions');
const admin = require('firebase-admin');
const request = require('request');

admin.initializeApp();
const db = admin.firestore();

function getFoursquarePlace(midPoint){
    let url = "https://api.foursquare.com/v2/venues/search?" +
    "ll=" + midPoint.latitude + "," + midPoint.longitude + "&client_id=" +
    client_id + "&client_secret=" + client_secret + "&v=" + version + "&radius=" + radius 
    + "&limit=" + limit + "&categoryId=" + categorySet;

    request(url, options, (error, res, body) => {
    if (error) {
        return console.log(error)
    }

    if (!error && res.statusCode === 200) {
        // do something with JSON, using the 'body' variable
            console.log("body: " + res.body);
        }
    });

Кто-нибудь знает, в чем может быть проблема? Я попытался удалить и переустановить request, но все еще получаю сообщение об ошибке.

Редактировать: Я проверил package-lock.json, и там находится пакет request:

"request": {
  "version": "2.88.0",
  "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz",
  "integrity": "sha512-NAqB3rk3LgxdsfHnTBNwN0E+lHDAJzu7m0328eY08z2/A0hg==",
  "requires": {
    "aws-sign2": "~0.7.0",
    "aws4": "^1.8.0",
    "caseless": "~0.12.0",
    "combined-stream": "~1.0.6",
    "extend": "~3.0.2",
    "forever-agent": "~0.6.1",
    "form-data": "~2.3.2",
    "har-validator": "~5.1.0",
    "http-signature": "~1.2.0",
    "is-typedarray": "~1.0.0",
    "isstream": "~0.1.2",
    "json-stringify-safe": "~5.0.1",
    "mime-types": "~2.1.19",
    "oauth-sign": "~0.9.0",
    "performance-now": "^2.1.0",
    "qs": "~6.5.2",
    "safe-buffer": "^5.1.2",
    "tough-cookie": "~2.4.3",
    "tunnel-agent": "^0.6.0",
    "uuid": "^3.3.2"
  }
},

пакет. json

{
  "name": "functions",
  "description": "Cloud Functions for Firebase",
  "scripts": {
    "lint": "eslint .",
    "serve": "firebase serve --only functions",
    "shell": "firebase functions:shell",
    "start": "npm run shell",
    "deploy": "firebase deploy --only functions",
    "logs": "firebase functions:log"
  },
  "engines": {
    "node": "8"
  },
  "dependencies": {
    "firebase-admin": "^8.0.0",
    "firebase-functions": "^3.1.0",
    "geofirestore": "3.3.1"
  },
  "devDependencies": {
    "eslint": "^5.12.0",
    "eslint-plugin-promise": "^4.0.1",
    "firebase-functions-test": "^0.1.6"
  },
  "private": true
}

1 Ответ

3 голосов
/ 11 января 2020

Это может произойти, когда вы "npm устанавливаете" зависимость не в ту папку, как я только что понял, что сделал. У меня есть проект Vue в подкаталоге "sr c" и индекс. js (облачная функция Firebase) в подкаталоге "functions".

Зависимости проекта Vue должны быть установлен с "npm install" в главном каталоге. Напротив, зависимости облачной функции Firebase должны быть установлены с «npm install», запущенным в подкаталоге «functions». Я случайно установил зависимость в главном каталоге и ломал голову, пытаясь понять, почему он жаловался, что не может найти зависимость (googleapis), пока не пойму, что сделал. Исправление, конечно, заключалось в том, чтобы установить его в нужном месте (чтобы оно появилось в нужном пакете. json) и удалить его из неправильного места для аккуратности.

npm uninstall request //removes the module from node_modules, but not package.json or npm uninstall --save request
npm cache clear --force
npm install --save --save-exact request@2.88.0       
firebase deploy --only functions
...