Я новичок в узле, который сейчас широко использую с функциями firebase.Я нашел этот замечательный кусок кода здесь :
const app = express();
const main = express();
main.use('/', app);
main.use(bodyParser.json());
main.use(bodyParser.urlencoded({
extended: false
}));
exports.webApi = functions.https.onRequest(main);
const glob = require("glob");
const files = glob.sync('./**/*.function.js', {
cwd: __dirname,
ignore: './node_modules/**'
});
for (let f = 0, fl = files.length; f < fl; f++) {
const file = files[f];
const functionName = file.split('/').pop().slice(0, -12); // Strip off '.function.js'
if (!process.env.FUNCTION_NAME || process.env.FUNCTION_NAME === functionName) {
exports[functionName] = require(file);
}
}
Он прочесывает стек файлов в функциях / filename / etc.f.js и вытаскивает мои функции экспорта, которые все заканчиваютсяf.js.Работает отлично.Теперь я переназначил это, чтобы также попытаться вставить аналогичный стек файлов для маршрутов API, и теперь он выглядит следующим образом
const app = express();
const main = express();
main.use('/', app);
main.use(bodyParser.json());
main.use(bodyParser.urlencoded({
extended: false
}));
exports.webApi = functions.https.onRequest(main);
const glob = require("glob");
const camelCase = require("camelcase");
const files = glob.sync('./**/*.js', {
cwd: __dirname,
ignore: ['./node_modules/**', './index.js']
});
for (let f = 0, fl = files.length; f < fl; f++) {
const file = files[f];
const pathCheck = file.slice(-6, -3);
if (pathCheck === 'api') {
const path = file.slice(1, -7); // Strip off '.api.js'
app.use(`${path}`, require(file));
} else {
const functionName = camelCase(file.slice(0, -5).split('/').join('_')); // Strip off '.f.js'
if (!process.env.FUNCTION_NAME || process.env.FUNCTION_NAME === functionName) {
exports[functionName] = require(file);
}
}
}
Структура файла для моего стека API выглядит следующим образом
functions
---api
------v1
--------deposit.api.js
--------invoice.api.js
------v2
--------deposit.api.js
--------deposit
------------:depistId (file name)
-----------------transaction.api.js
---db
------deposit
------------onCreate.f.js
------------onUpdate.f.js
Ожидаемые пути будут
/api/v1/deposit
/api/v1/invoice
/api/v2/deposit
/api/v2/deposit/:deposit/transaction
В каждом из моих filename.api.js есть что-то, что влияет на
var express = require('express')
var router = express.Router()
// middleware that is specific to this router
router.use(function timeLog(req, res, next) {
console.log('Time: ', Date.now())
next()
});
router.delete('/:depositId', (req, res) => {
// firebaseHelper.firestore
// .deleteDocument(db, contactsCollection, req.params.contactId);
return res.status(200).send('Deposit deleted');
});
module.exports = router
Это просто не похоже на работу.Если я вручную добавлю путь и требую файл в index.js, он будет работать нормально.Хотите знать, если что-то не так с моим кодом, или понимание того, как работает узел, оцените любую помощь.
Woohoo за первый вопрос!,
Заранее спасибо,
Чад