错误:解析函数触发器时发生错误。
TypeError: require(...) is not a function
at Object.<anonymous> (A:\Android Projects\buy_storage_try\buy\functions\index.js:21:45)
这是代码行:
const gcs = require('@google-cloud/storage')(gcconfig);
完整的错误消息:
Error: Error occurred while parsing your function triggers.
TypeError: require(...) is not a function
at Object.<anonymous> (A:\Android Projects\buy_storage_try\buy\functions\index.js:21:45)
at Module._compile (internal/modules/cjs/loader.js:688:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:699:10)
at Module.load (internal/modules/cjs/loader.js:598:32)
at tryModuleLoad (internal/modules/cjs/loader.js:537:12)
at Function.Module._load (internal/modules/cjs/loader.js:529:3)
at Module.require (internal/modules/cjs/loader.js:636:17)
at require (internal/modules/cjs/helpers.js:20:18)
at C:\Users\itzpa\AppData\Roaming\npm\node_modules\firebase-tools\lib\triggerParser.js:15:15
at Object.<anonymous> (C:\Users\itzpa\AppData\Roaming\npm\node_modules\firebase-tools\lib\triggerParser.js:53:3)
代码:
const functions = require('firebase-functions');
const cors = require('cors')({ origin: true });
const Busboy = require('busboy');
const os = require('os');
const path = require('path');
const fs = require('fs');
const fbAdmin = require('firebase-admin');
const uuid = require('uuid/v4');
// // Create and Deploy Your First Cloud Functions
// // https://firebase.google.com/docs/functions/write-firebase-functions
//
// exports.helloWorld = functions.https.onRequest((request, response) => {
// response.send("Hello from Firebase!");
// });
const gcconfig = {
projectId: '***',
keyFilename: '***.json'
};
const gcs = require('@google-cloud/storage')(gcconfig);
fbAdmin.initializeApp({
credential: fbAdmin.credential.cert(require('./***.json'))
});
exports.storeImage = functions.https.onRequest((req, res) => {
return cors(req, res, () => {
if (req.method !== 'POST') {
return res.status(500).json({ message: 'Not allowed.' });
}
if (
!req.headers.authorization ||
!req.headers.authorization.startsWith('Bearer ')
) {
return res.status(401).json({ error: 'Unauthorized.' });
}
let idToken;
idToken = req.headers.authorization.split('Bearer ')[1];
const busboy = new Busboy({ headers: req.headers });
let uploadData;
let oldImagePath;
busboy.on('file', (fieldname, file, filename, encoding, mimetype) => {
const filePath = path.join(os.tmpdir(), filename);
uploadData = { filePath: filePath, type: mimetype, name: filename };
file.pipe(fs.createWriteStream(filePath));
});
busboy.on('field', (fieldname, value) => {
oldImagePath = decodeURIComponent(value);
});
busboy.on('finish', () => {
const bucket = gcs.bucket('flutter-buy.appspot.com');
const id = uuid();
let imagePath = 'images/' + id + '-' + uploadData.name;
if (oldImagePath) {
imagePath = oldImagePath;
}
return fbAdmin
.auth()
.verifyIdToken(idToken)
.then(decodedToken => {
return bucket.upload(uploadData.filePath, {
uploadType: 'media',
destination: imagePath,
metadata: {
metadata: {
contentType: uploadData.type,
firebaseStorageDownloadTokens: id
}
}
});
})
.then(() => {
return res.status(201).json({
imageUrl:
'https://firebasestorage.googleapis.com/v0/b/' +
bucket.name +
'/o/' +
encodeURIComponent(imagePath) +
'?alt=media&token=' +
id,
imagePath: imagePath
});
})
.catch(error => {
return res.status(401).json({ error: 'Unauthorized!' });
});
});
return busboy.end(req.rawBody);
});
});
答案 0 :(得分:1)
使用它代替gcconfig
。
应该就可以了。
const projectId = 'your-project-id';
const keyFilename = 'your-keyfile.json';
const {
Storage
} = require('@google-cloud/storage');
const gcs = new Storage({
projectId: projectId,
keyFilename: keyFilename
});
答案 1 :(得分:0)
您使用的@ google-cloud / storage版本大于或等于2.0.0。 API在2.0.0中进行了更改。您正在关注的教程已过时,可能是针对1.x编写的。
查看模块的documentation。初始化SDK的方法如下:
// Imports the Google Cloud client library
const {Storage} = require('@google-cloud/storage');
// Creates a client
const storage = new Storage();
const bucket = storage.bucket();