javascript - 在 Express 应用程序初始化期间加载 JSON 文件

标签 javascript json node.js express backend

我有一个电影查找应用程序,它在后端进行 API 调用。在初始化期间,我需要加载一些 JSON 文件:一个 (lang.json) 包含用于搜索目的的语言列表,另一个(存储在 config 变量中)用于使用获取电影海报的链接。

如何确保在发出 HTTP 请求之前完成这些文件的加载?我能想到的一个解决方案是将调用放入 app.get()fs.readfile() 回调中的 app.listen() 。但还有更好的办法吗? Web 开发对我来说是全新的。

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.listen() 之前使用 fs.readFileSync()。例如:

var lang = fs.readFileSync('lang.json');

app.get('/lang', function(req, res) {
  res.setHeader('Content-Type', 'application/json');
  res.send(lang);
});

// ...

请注意,如果在 Node 进程的生命周期内磁盘上的 lang.json 内容发生更改,lang 的内容将不会自动更新。

关于javascript - 在 Express 应用程序初始化期间加载 JSON 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38842669/

相关文章:

javascript - React 看到除数组之外的所有内容

ajax - 在 Django 中使用 fileReader.readAsDataURL 通过 Ajax 传输图像并在 PIL 中打开

javascript - 在 JavaScript 和 JSON 中,为什么 str = JSON.stringify(obj); 的结果是等于 {}?

javascript - 使用嵌入式记录和 Ember 数据

javascript - 将 View 渲染为 HTML

javascript - axios.get 请求返回 GET,HEAD 作为响应

javascript - 在保留绑定(bind)的同时连接集合

javascript - 使用 <a> 删除 url 中的目录

php - javascript中是否有类似运算符的列表?

javascript - Node.js 将 Buffer 转换为对象/函数