Не удается отправить данные сообщения через расширение Chrome - PullRequest
1 голос
/ 20 мая 2019

У меня есть конечная точка API, и я знаю, что она работает правильно (я часто тестирую, успешно использую PostMan). Проблема в том, что когда я отправляю сообщения через расширение Chrome, я могу подключиться, однако значения данных не отправляются.

Вот мой манифест хрома: {

"background": {
    "scripts": ["eventPage.js","jquery-3.3.1.min.js"],
    "persistent": false
},

"content_scripts": [
    {
        "matches": ["https://*.amazon.com/*"],
        "js": ["content.js", "jquery-3.3.1.min.js", "inject.js"],
        "css": ["content.css"]
    }
],

"permissions": [
    "tabs",
    "storage",
    "https://*.amazon.com/*",
    "https://*.cloudfunctions.net/*"
] }

Вот страница события, которая делает звонок:

// listen to all messages at runtime
chrome.runtime.onMessage.addListener(function(request, sender, sendResponse){
    if (request.todo == 'sendLoad') {
        console.log("MADE IT! Request Data", request.data)
        // FYI the request.data output is correct; everything is there

        // AJAX
        $.ajax({
            url: "https://prefix.cloudfunctions.net/endpoint",
            type: "post",
            data: {productName: encodeURIComponent(jQuery.trim(request.data.productName)), productImg: encodeURIComponent(request.data.productImg), productUrl: encodeURIComponent(request.data.productUrl), price: request.data.price, byLineValue: request.data.byLineValue, byLineUrl: encodeURIComponent(request.data.byLineUrl), amazonPath: encodeURIComponent(request.data.amazonPath[2]), uid: request.data.uid, tid: "1"} ,
            success: function (response) {
                console.log("Send complete: ", response);
            },
            error: function(jqXHR, textStatus, errorThrown) {
                console.log(textStatus, errorThrown);
            }  
        });

    };
});

(К вашему сведению, я также пытался отправить request.data в одиночку и безуспешно.) Я также попытался сделать вызов, используя запрос xmlhttp:

xmlhttp=new XMLHttpRequest();
xmlhttp.open("POST","https://prefix.cloudfunctions.net/endpoint",true);
xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
xmlhttp.send(request.data);

И я также попробовал использовать пост jQuery:

$.post("https://prefix.cloudfunctions.net/endpoint",{{productName: encodeURIComponent(jQuery.trim(request.data.productName)), productImg: encodeURIComponent(request.data.productImg), productUrl: encodeURIComponent(request.data.productUrl), price: request.data.price, byLineValue: request.data.byLineValue, byLineUrl: encodeURIComponent(request.data.byLineUrl), amazonPath: encodeURIComponent(request.data.amazonPath[2]), uid: request.data.uid, tid: "1"})
.done(function (data) {
    console.log("Send complete: " + data);
})
.fail(function() {
    console.log("Error sending data")
})
.always(function() {
    console.log("jQuery Post complete")
})

Для каждого из них мой API возвращает сообщение о том, что значения не существуют:

Error: Value for argument "data" is not a valid Firestore document. Cannot use "undefined" as a Firestore value (found in field productImg).
    at Object.validateUserInput (/srv/node_modules/@google-cloud/firestore/build/src/serializer.js:273:15)
    at Object.validateDocumentData (/srv/node_modules/@google-cloud/firestore/build/src/write-batch.js:622:26)
    at CollectionReference.add (/srv/node_modules/@google-cloud/firestore/build/src/reference.js:1743:23)
    at exports.addToTrunk.functions.https.onRequest (/srv/lib/index.js:27:14)
    at cloudFunction (/srv/node_modules/firebase-functions/lib/providers/https.js:57:9)
    at /worker/worker.js:783:7
    at /worker/worker.js:766:11
    at _combinedTickCallback (internal/process/next_tick.js:132:7)
    at process._tickDomainCallback (internal/process/next_tick.js:219:9)

Как я упоминал ранее, конечная точка успешно работает, но не находит отправляемых значений данных.

UPDATE: Это похоже на функцию добавления add в firebase, которая работает неправильно. Вот код в функции firebase:

  newTrunk.add({
    created_at: created_at,
    uid: "CG8B0mdqzMed3PPCiwsKkBtXmiA2", //request.body.uid, //TODO: pull in uid from localstorage
    tid: '1', //TODO: provide list of trunks for person to select from when adding via extension
    productImg: JSON.stringify(request.body.productImg),
        price: JSON.stringify(request.body.price),
    productUrl: JSON.stringify(request.body.productUrl),
    byLineValue: JSON.stringify(request.body.byLineValue),
    byLineUrl: JSON.stringify(request.body.byLineUrl),
    amazonPath: JSON.stringify(request.body.amazonPath),
    source: JSON.stringify(request.body.source),
    productName: JSON.stringify(request.body.productName)
    // Tried to stringify and see if it would help ... it didn't
    // productImg: request.body.productImg,
        // price: request.body.price,
    // productUrl: request.body.productUrl,
    // byLineValue: request.body.byLineValue,
    // byLineUrl: request.body.byLineUrl,
    // amazonPath: request.body.amazonPath,
    // source: request.body.source,
    // productName: request.body.productName
  })
  .then(function(docRef) {
        // console.log("TCL: docRef", docRef)
    console.log("New item in trunk added with ID: ", docRef.id)
    response.status(200).send("Successful")
  })
  .catch(function(error) {
    console.error("Error adding newTrunk: ", error)
    response.status(500).send(error)
  });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...