У меня есть приложение для поиска фильмов, которое вызывает вызовы API в бэкэнд. Во время инициализации мне нужно загрузить некоторые файлы JSON: один (lang.json
) содержит список языков для поиска, другой (хранится в переменной config
) используется для получения ссылки на плакат фильма.Загрузка файлов JSON во время запуска Express-приложения
Как я могу гарантировать, что загрузка этих файлов будет завершена до того, как будет сделан запрос HTTP? Одним из решений, о котором я могу думать, является включение вызовов app.get()
и app.listen()
внутри обратного вызова fs.readfile()
. Но есть ли лучший способ? Веб-разработка для меня совершенно новая.
var express = require('express');
var app = express();
var fs = require('fs');
var request = require('request');
var merge = require('merge');
require('dotenv').config();
var apiKey = process.env.API_KEY;
var config = {};
app.use(express.static('view'));
// TODO load config and lang before below code
app.get('/lang', function(req, res) {
fs.readFile('lang.json', function(err, data) {
if (err) throw err;
res.json(JSON.parse(data));
});
});
app.get('/genres', function(req, res) {
request.get({
url: 'http://api.themoviedb.org/3/genre/movie/list',
qs: {api_key: apiKey}
}, function(error, response, body) {
res.json(JSON.parse(body).genres);
});
});
app.get('/randomMovie', function(req, res) {
request.get({
url: 'https://api.themoviedb.org/3/discover/movie',
qs: merge(req.query, {api_key: apiKey})
}, function(error, response, body) {
body = JSON.parse(body).results;
var len = body.length;
var i = Math.floor(Math.random() * len);
var movie = body[i];
// movie.poster_path = movie.images.base_url + movie.images.poster_sizes[6] + movie.poster_path;
res.json(movie);
});
});
app.listen(3000, function() {
console.log('server started on port 3000');
});
Почему вы не загружаете файл вне функции 'app.get'? – Roysh