【问题标题】:NodeJS - 'Error: Invalid URI "/"'NodeJS - '错误:无效的URI“/”'
【发布时间】:2017-10-01 04:03:03
【问题描述】:

我正在使用 request-promise 请求两个 JSON 数据文件,它们存在于我的本地项目目录文件夹中。 即:

但是,当我尝试将数据传递到视图并且我的节点控制台输出 'Error: Invalid URI "/"', 时,我收到 500 内部服务器错误

请看下面:

server.js

    let express = require('express');
    let app = express();
    let path = require('path');
    const rp = require("request-promise");

    //STORE PATH for local JSON files on variables
    let guest = require('./public/data/Companies');
    let hotel = require('./public/data/Guests');

    app.set("port", process.env.PORT || 5000);

    //GET JSON
    //Question: Is it okay to pass uri:guest
    app.get('/data', function(req, res) {
        Promise.all([rp({uri: guest, json: true}), rp({uri: hotel, json: true})]).then(function([hotels, guests]) {
            //res.json({hotels, guests});
            res.send({hotels, guests});
            console.log(hotels, guests);
        }).catch(function(err) {
            console.log(err);
            res.status(500).end();
        });
    });


    //CATCHALL
    app.get("/*", function(req,res){
        let file = req.params[0] || "/views/index.html";
        res.sendFile(path.join(__dirname, "/public/", file));
    });

    //SET PORT
    app.listen(app.get("port"), function(){
        console.log("Listening on port: " , app.get("port"));
    });

然后在 client.js:

$(function() {
    $.ajax({
        type: "GET",
        url: "/data",
        success: function (res) {
            console.log(res);
        }
    });
});

【问题讨论】:

    标签: javascript node.js ajax express request-promise


    【解决方案1】:

    为什么使用 request 来获取数据?为什么不使用 Node.js (fs) 中的文件系统模块来获取数据?当您调用rp() 时,您应该传递一个绝对 URI 而不是本地路径。

    要在您的代码中使用它,您需要“承诺” readFile 函数:

    let readFileAsAPromise = function(filename){
      return new Promise(function(resolve, reject) {
        fs.readFile(filename, (data, err) => {
          if(err) reject(err);
          resolve(data)
        })
      })
    }
    

    然后你可以Promise.all

    【讨论】:

    • 请您发布一个使用 (fs) 获取两个 json 文件的示例? @Olivier Liechti
    【解决方案2】:

    你为什么不简单地返回变量?

    我的意思是:

    app.get('/data', function(req, res) {
        res.send({hotels, guests}); 
    });
    

    【讨论】:

      猜你喜欢
      • 2020-04-21
      • 2016-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-01
      • 2016-01-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多