【问题标题】:How to provide json text file to client side ajax request on node.js server如何在node.js服务器上向客户端ajax请求提供json文本文件
【发布时间】:2019-05-17 02:30:01
【问题描述】:

我在 aws ubuntu 服务器上运行一个简单的 node.js Web 应用程序。我有一些来自 api 的 json 数据,这些数据已本地存储在 ubuntu 服务器上的一个名为 data.json 的文本文件中。

我只是想通过 AJAX 调用从 json 文件中加载该数据并将其呈现在客户端 html 上。

这是我的项目目录结构:

    MyApp
      server.js
      index.html
      data.json

此客户端代码在 Webstorm 和本地工作,但在我的实时服务器上返回一个错误(看起来它返回一个 html 错误文件而不是解释解析错误的 json,但没有解决如何获取此数据)。

<script>
    $(document).ready(function(){
      $.ajax({
             url: "/data/data.json",
             method: "GET",
             dataType: "json",
             error: function() {
                  console.log("error");
             },
             success: function(data) {
                  console.log(data);
             }
        });
  });
</script>

我想我需要从节点内提供这个 json 文件,以便我可以从客户端发出 HTTP GET 请求,但不明白这一切是如何结合在一起的。有人可以帮忙举个例子吗?

编辑:节点 server.js 代码:

var express = require('express');
var app = express();
var server = require('http').createServer(app);

var router = express.Router();

router.use(function (req, res, next) {
    console.log("/" + req.method);
    next();
});

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

app.use("/",router);

app.use("*",function(req, res){
    res.sendFile(__dirname + "/index.html");
});

app.use('/data', express.static('public'));

server.listen(process.env.PORT || 3000);
console.log('Server is running on port 3000...');

【问题讨论】:

  • 谢谢,你有什么例子吗?我把它写在我的 server.js 节点文件中?前端怎么调用的?
  • 是的,快递。我需要“服务静态”还是什么?谢谢

标签: jquery node.js ajax


【解决方案1】:

我建议将*.json 文件放入子文件夹。比在服务器端提供对该文件夹的静态访问权限。

示例: 将所有*.json 文件放入./public 文件夹中

// server.js
const express = require('express')
const app = express()

app.use('/data', express.static('public'))
...

客户端:

$.get( "/data/my-file.json", function( data ) {
  alert( "Data Loaded: " + data );
});

【讨论】:

  • 当我这样做而不是我的 data.json 时,它正在加载一个 html 文件。然后错误因为无法解析'
  • 将 app.use 放在路由之前
  • 我更新了我的问题以包含我的 server.js 节点代码。
  • 只需移动行 app.use('/data', express.static('public')) - 在行 app.use("/",router); 之前顺序很重要!
猜你喜欢
  • 2012-05-17
  • 2018-11-06
  • 2012-01-17
  • 2023-03-20
  • 1970-01-01
  • 2015-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多