[英]GET route only works with parameter - node.js + express
我对node + express非常陌生,无法设置获取路线。 当我在下面提到的路由中使用参数时,我正在获取数据而没有任何问题。 但是,当我尝试返回不带参数的对象时,我从邮递员和本地主机:3000得到了空白页。
我最初以为我的循环是导致问题的原因,但是当我console.log我试图传递res.send的对象时,它看起来还不错。
以下是我的两条路线(在这种情况下,/ cards / imgs返回空白页,但是/ cards / imgs:id路径正确返回了网址:
编辑1:在route.js中定义idIndexes的路由上方添加代码
route.js-
const cards = require('C:/Hearthstone/cards.json');
const data = cards["data"];
var idIndexes = [];
var cardClassIndexes = [];
for (let a in data) {
idIndexes.push(data[a]["id"]);
};
// index the cards by their "cardClass"
for (let a in data) {
cardClassIndexes.push(data[a]["cardClass"]);
};
module.exports = (app, db) => {
// get all card image urls
app.get('/cards/imgs', (req, res) => {
const imgURL = 'http://media.services.zam.com/v1/media/byName/hs/cards/enus/'
var imgArr = {};
for (let id in idIndexes) {
var cardID = idIndexes[id];
var imgURL_Temp = imgURL + cardID + '.png';
imgArr[cardID] = imgURL_Temp;
};
res.set('Content-Type', 'application/json');
res.send(JSON.stringify(imgArr));
});
// get card image url based on id
app.get('/cards/imgs/:id', (req, res) => {
const id = req.params.id;
const imgURL = 'http://media.services.zam.com/v1/media/byName/hs/cards/enus/'
const imgURL_Temp = imgURL + id + '.png';
var arr = {};
arr["url"] = imgURL_Temp
res.set('Content-Type', 'application/json');
res.send(arr);
});
// get all card information
app.get('/cards', (req, res) => {
res.set('Content-Type', 'application/json');
res.send(JSON.stringify(data));
});
};
以下是用于API的其余文件
index.js文件-
const cardRoutes = require('./routes.js');
module.exports = (app, db) => {
cardRoutes(app, db);
};
server.js文件-
const express = require('express');
const MongoClient = require('mongodb').MongoClient;
const bodyParser = require('body-parser');
const app = express();
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
const port = 3000;
const routes = require('./app/routes');
require('./app/routes')(app, {});
if (app.listen(port)) {
console.log("Live on port: " + port);
};
package.json文件-
{
"name": "Hearthstone",
"version": "1.0.0",
"description": "API for Hearthstone cards",
"main": "index.js",
"scripts": {
"test": "start",
"dev": "nodemon server.js"
},
"author": "michael gross",
"license": "ISC",
"dependencies": {
"body-parser": "^1.18.2",
"express": "^4.16.2",
"mongodb": "^3.0.2"
},
"devDependencies": {
"nodemon": "^1.14.12"
}
}
idIndexes未定义。
app.get('/cards/imgs', (req, res) => {
const imgURL = 'http://media.services.zam.com/v1/media/byName/hs/cards/enus/'
var imgArr = {};
for (let id in idIndexes) { //here
var cardID = idIndexes[id];
var imgURL_Temp = imgURL + cardID + '.png';
imgArr[cardID] = imgURL_Temp;
};
res.set('Content-Type', 'application/json');
res.send(JSON.stringify(imgArr));
});
尝试像这样更改您的route.js文件...
module.exports = (app, db) => {
// get all card image urls
app.get('/cards/imgs', (req, res) => {
const imgURL = 'http://media.services.zam.com/v1/media/byName/hs/cards/enus/'
var imgArr = {};
for (let id in idIndexes) {
var cardID = idIndexes[id];
var imgURL_Temp = imgURL + cardID + '.png';
imgArr[cardID] = imgURL_Temp;
};
res.status(200).send(imgArr);
});
// get card image url based on id
app.get('/cards/imgs/:id', (req, res) => {
const id = req.params.id;
const imgURL = 'http://media.services.zam.com/v1/media/byName/hs/cards/enus/'
const imgURL_Temp = imgURL + id + '.png';
var arr = {};
arr["url"] = imgURL_Temp
res.status(200).send(arr);
});
};
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.