NodeJS - 'Error: Invalid URI "/"'
NodeJS - 'Error: Invalid URI "/"'
我正在使用 request-promise 请求两个 JSON 数据文件,它们存在于我的本地项目目录文件夹中。
即:
但是,当我尝试将数据传递到视图和我的节点控制台输出时,出现了 500 内部服务器错误 'Error: Invalid URI "/"',
请看下面:
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);
}
});
});
为什么要用request来获取数据?为什么不使用 Node.js (fs
) 中的文件系统模块来获取数据?当您调用 rp()
时,您应该传递绝对 URI 而不是本地路径。
要在您的代码中使用它,您需要"promisify" readFile 函数:
let readFileAsAPromise = function(filename){
return new Promise(function(resolve, reject) {
fs.readFile(filename, (data, err) => {
if(err) reject(err);
resolve(data)
})
})
}
然后你可以 Promise.all
.
为什么不直接返回变量?
我的意思是:
app.get('/data', function(req, res) {
res.send({hotels, guests});
});
我正在使用 request-promise 请求两个 JSON 数据文件,它们存在于我的本地项目目录文件夹中。 即:
但是,当我尝试将数据传递到视图和我的节点控制台输出时,出现了 500 内部服务器错误 'Error: Invalid URI "/"',
请看下面:
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);
}
});
});
为什么要用request来获取数据?为什么不使用 Node.js (fs
) 中的文件系统模块来获取数据?当您调用 rp()
时,您应该传递绝对 URI 而不是本地路径。
要在您的代码中使用它,您需要"promisify" readFile 函数:
let readFileAsAPromise = function(filename){
return new Promise(function(resolve, reject) {
fs.readFile(filename, (data, err) => {
if(err) reject(err);
resolve(data)
})
})
}
然后你可以 Promise.all
.
为什么不直接返回变量?
我的意思是:
app.get('/data', function(req, res) {
res.send({hotels, guests});
});