Ich habe eine App zur Filmsuche, die API-Aufrufe im Backend durchführt. Während der Initialisierung muss ich einige JSON-Dateien laden: eine (lang.json
) enthält eine Liste von Sprachen für Suchzwecke, die andere (gespeichert in der config
Variable) wird verwendet, um einen Link zum Filmplakat zu bekommen.Laden von JSON-Dateien während der Express-App-Initialisierung
Wie würde ich sicherstellen, dass das Laden dieser Dateien abgeschlossen ist, bevor eine HTTP-Anfrage gestellt wird? Eine Lösung, die ich mir vorstellen kann, beinhaltet die Aufrufe app.get()
und app.listen()
innerhalb fs.readfile()
Rückruf. Aber gibt es einen besseren Weg? Web-Entwicklung ist für mich völlig neu.
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');
});
Warum laden Sie die Datei nicht außerhalb der Funktion 'app.get'? – Roysh