Express маршрут не выполняется при запросе файла JSON - PullRequest
0 голосов
/ 15 апреля 2020

Я определил маршрут в моем приложении Express, которое должно выполнить строку кода, а затем вернуть файл JSON, но происходит то, что файл возвращается, но строка кода не выполняется.

Это код сервера:

var express = require('express');
var body_parser = require("body-parser");
var path = require('path');

server = express();
server.use(body_parser.json());
server.use(body_parser.urlencoded({ extended: true }));
server.use(express.static(path.join(__dirname, '/')));

server.get("/", function(req, res) {
    res.sendFile("index.html");
});

server.get("/request.json", function(req, res) {
    console.log('File \"request.json\" requested.')
    res.sendFile(__dirname + "/request.json")
});

server.listen(80, function() {
    console.log("Server listening on port 80");
});

Внутри index.html есть только тег сценария, определенный как:

<body>
    <script>
        $(document).ready(function(){       
            $.getJSON("/request.json", function(data) {
                console.log(data)
            });
        })
    </script>
</body>

Я вижу содержимое request.json файл в консоли chrome, но ожидаемое сообщение "File "request.json" requested" не отображается на терминале сервера.

Почему маршрут не выполняется?

Ответы [ 2 ]

0 голосов
/ 15 апреля 2020

Вы можете написать на заказ static middleware. Можно записать логи c, чтобы не обслуживать файл [exclude].

Примечание: Примечание рекомендую от меня, лучше смените название маршрута на /response.json

var express = require("express");

var path = require("path");
var app = express();
var statics = express.static(path.join(__dirname, "/"));
function customServe(secure) {
  return function (req, res, next) {
    console.log(req.path);
    if (req.path != "/response.json") return statics(req, res, next);
    return next();
  };
}
app.use(customServe());
app.get("/response.json", (req, res) => {
  console.log("something...");
  res.send({ json: "json" });
});
app.listen(8080, () => console.log("working on 8080"));
0 голосов
/ 15 апреля 2020

express.static вызывается перед маршрутом /request.json и уже возвращает файл. Используйте это:

const express = require('express');
const bodyParser = require("body-parser");
const path = require('path');

server = express();
server.use(bodyParser.json());
server.use(bodyParser.urlencoded({ extended: true }));

server.get("/request.json", function(req, res) {
    console.log('File \"request.json\" requested.')
    res.sendFile(__dirname + "/request.json")
});

server.use(express.static(path.join(__dirname, '/')));

server.get("/", function(req, res) {
    res.sendFile("index.html");
});

server.listen(80, function() {
    console.log("Server listening on port 80");
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...