node.js:仅安装googleapis所需的模块

发布于 2025-02-06 01:14:36 字数 2824 浏览 2 评论 0 原文

我正在使用nodejs发送FCM通知。以下是我的代码,

const errorCodes = require('source/error-codes');
const PropertiesReader = require('properties-reader');
const serviceAccount = require("service-account.json");
const fetch = require('node-fetch');

var {
    google
} = require('googleapis');
var MESSAGING_SCOPE = 'https://www.googleapis.com/auth/firebase.messaging';
var SCOPES = [MESSAGING_SCOPE];

const prop = PropertiesReader('properties.properties');

exports.sendSingleNotification = async (event, context) => {

    var PROJECT_ID = "xxx";

    if (event.body == null && event.body == undefined) {
        var response = errorCodes.missing_parameters;
        return response;
    }


    try {

        let body = JSON.parse(event.body)
        console.log("body", body);

        let promise = new Promise(function(resolve, reject) {
            var key = require("service-account.json");
            var jwtClient = new google.auth.JWT(
                key.client_email,
                null,
                key.private_key,
                SCOPES,
                null
            );
            jwtClient.authorize(function(err, tokens) {
                if (err) {
                    reject(err);
                    return {
                        "error": "error 1"
                    };
                }
                console.log("resolve");
                console.log(tokens);
                resolve(tokens.access_token);
            });
        });

        let accessToken = await promise;
        console.log("access token");
        console.log(accessToken);

        var message = {
            "message": {
                "token": body.fcmToken,
                "notification": {
                    "title": "Portugal vs. Denmark",
                    "body": "great match!"
                }
            }
        };

        const response = await fetch('https://fcm.googleapis.com/v1/projects/' + PROJECT_ID + '/messages:send', {
            method: 'post',
            body: JSON.stringify(message),
            headers: {
                'Content-Type': 'application/json',
                'Authorization': 'Bearer ' + accessToken
            }
        });
        const data = await response.json();

        return {
            "message": data
        }

    } catch (error) {
        console.log(error);
        return {
            "error 2": error
        }
    }


};

代码正常。但是,为了完成这项工作,我已经通过 npm安装googleapis 安装了整个 googleapis npm。这似乎已经下载了我不需要的许多模块,并且增加了我的应用程序的编译时间。它也可能会增加AWS lambda冷启动时间(这是一个lambda应用程序)。

文档说,如果需要减少启动时间,我们可以安装特定的模块()。

我的问题是,查看我的代码,我需要安装的模块是什么而不是整个 googleapis

I am using NodeJs to send FCM notifications. Below is my code

const errorCodes = require('source/error-codes');
const PropertiesReader = require('properties-reader');
const serviceAccount = require("service-account.json");
const fetch = require('node-fetch');

var {
    google
} = require('googleapis');
var MESSAGING_SCOPE = 'https://www.googleapis.com/auth/firebase.messaging';
var SCOPES = [MESSAGING_SCOPE];

const prop = PropertiesReader('properties.properties');

exports.sendSingleNotification = async (event, context) => {

    var PROJECT_ID = "xxx";

    if (event.body == null && event.body == undefined) {
        var response = errorCodes.missing_parameters;
        return response;
    }


    try {

        let body = JSON.parse(event.body)
        console.log("body", body);

        let promise = new Promise(function(resolve, reject) {
            var key = require("service-account.json");
            var jwtClient = new google.auth.JWT(
                key.client_email,
                null,
                key.private_key,
                SCOPES,
                null
            );
            jwtClient.authorize(function(err, tokens) {
                if (err) {
                    reject(err);
                    return {
                        "error": "error 1"
                    };
                }
                console.log("resolve");
                console.log(tokens);
                resolve(tokens.access_token);
            });
        });

        let accessToken = await promise;
        console.log("access token");
        console.log(accessToken);

        var message = {
            "message": {
                "token": body.fcmToken,
                "notification": {
                    "title": "Portugal vs. Denmark",
                    "body": "great match!"
                }
            }
        };

        const response = await fetch('https://fcm.googleapis.com/v1/projects/' + PROJECT_ID + '/messages:send', {
            method: 'post',
            body: JSON.stringify(message),
            headers: {
                'Content-Type': 'application/json',
                'Authorization': 'Bearer ' + accessToken
            }
        });
        const data = await response.json();

        return {
            "message": data
        }

    } catch (error) {
        console.log(error);
        return {
            "error 2": error
        }
    }


};

The code works fine. However to get this job done, I have installed the entire googleapis npm via npm install googleapis. This seems to have downloaded many modules I do not require, and it has increased the compile time of my app. It will also probably increase the AWS Lambda cold start time too (this is a Lambda app).

The doc says we can install specific modules if we need to reduce the startup times (https://www.npmjs.com/package/googleapis/v/101.0.0).

My question is, looking at my code what are the modules I require to install instead of the entire googleapis?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

鹿港小镇 2025-02-13 01:14:37

我一个人想知道。我必须安装 Google-Auth-library npm模块。这是代码。

const errorCodes = require('source/error-codes');
const PropertiesReader = require('properties-reader');
const serviceAccount = require("service-account.json");
const fetch = require('node-fetch');

var googleAuth = require('google-auth-library');
var MESSAGING_SCOPE = 'https://www.googleapis.com/auth/firebase.messaging';
var SCOPES = [MESSAGING_SCOPE];

const prop = PropertiesReader('properties.properties');

exports.sendChatNotification = async (event, context) => {

    var PROJECT_ID = "xxx-xxx";

    if (event.body == null && event.body == undefined) {
        var response = errorCodes.missing_parameters;
        return response;
    }

    let body = JSON.parse(event.body)

    // if (body.recieverUid == null ||
    //     body.senderUid == null ||
    //     body.message == null
    // ) {
    //     console.log("fire 1");
    //     var response = errorCodes.not_null_parameters;
    //     return response;
    // }


    try {

        console.log("body", body);

        let promise = new Promise(function(resolve, reject) {
            var key = require("service-account.json");
            // var jwtClient = new google.auth.JWT(
            //     key.client_email,
            //     null,
            //     key.private_key,
            //     SCOPES,
            //     null
            // );
            var jwtClient = new googleAuth.JWT(
                key.client_email,
                null,
                key.private_key,
                SCOPES,
                null
              );
            jwtClient.authorize(function(err, tokens) {
                if (err) {
                    reject(err);
                    return {
                        "error": "error 1"
                    };
                }
                console.log("resolve");
                console.log(tokens);
                resolve(tokens.access_token);
            });
        });

        let accessToken = await promise;
        console.log("access token");
        console.log(accessToken);

        var message = {
            "message": {
                "token": body.fcmToken,
                "notification": {
                    "title": "Portugal vs. Denmark",
                    "body": "great match!"
                }
            }
        };

        const response = await fetch('https://fcm.googleapis.com/v1/projects/' + PROJECT_ID + '/messages:send', {
            method: 'post',
            body: JSON.stringify(message),
            headers: {
                'Content-Type': 'application/json',
                'Authorization': 'Bearer ' + accessToken
            }
        });
        const data = await response.json();

        return {
            "message": data
        }

    } catch (error) {
        console.log(error);
        return {
            "error 2": error
        }
    }


};

I figured out by myself. I had to install google-auth-library npm module. Here is the code.

const errorCodes = require('source/error-codes');
const PropertiesReader = require('properties-reader');
const serviceAccount = require("service-account.json");
const fetch = require('node-fetch');

var googleAuth = require('google-auth-library');
var MESSAGING_SCOPE = 'https://www.googleapis.com/auth/firebase.messaging';
var SCOPES = [MESSAGING_SCOPE];

const prop = PropertiesReader('properties.properties');

exports.sendChatNotification = async (event, context) => {

    var PROJECT_ID = "xxx-xxx";

    if (event.body == null && event.body == undefined) {
        var response = errorCodes.missing_parameters;
        return response;
    }

    let body = JSON.parse(event.body)

    // if (body.recieverUid == null ||
    //     body.senderUid == null ||
    //     body.message == null
    // ) {
    //     console.log("fire 1");
    //     var response = errorCodes.not_null_parameters;
    //     return response;
    // }


    try {

        console.log("body", body);

        let promise = new Promise(function(resolve, reject) {
            var key = require("service-account.json");
            // var jwtClient = new google.auth.JWT(
            //     key.client_email,
            //     null,
            //     key.private_key,
            //     SCOPES,
            //     null
            // );
            var jwtClient = new googleAuth.JWT(
                key.client_email,
                null,
                key.private_key,
                SCOPES,
                null
              );
            jwtClient.authorize(function(err, tokens) {
                if (err) {
                    reject(err);
                    return {
                        "error": "error 1"
                    };
                }
                console.log("resolve");
                console.log(tokens);
                resolve(tokens.access_token);
            });
        });

        let accessToken = await promise;
        console.log("access token");
        console.log(accessToken);

        var message = {
            "message": {
                "token": body.fcmToken,
                "notification": {
                    "title": "Portugal vs. Denmark",
                    "body": "great match!"
                }
            }
        };

        const response = await fetch('https://fcm.googleapis.com/v1/projects/' + PROJECT_ID + '/messages:send', {
            method: 'post',
            body: JSON.stringify(message),
            headers: {
                'Content-Type': 'application/json',
                'Authorization': 'Bearer ' + accessToken
            }
        });
        const data = await response.json();

        return {
            "message": data
        }

    } catch (error) {
        console.log(error);
        return {
            "error 2": error
        }
    }


};
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文