繁体   English   中英

GET路由仅适用于参数-node.js + express

[英]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);
};

命令

本地主机

本地主机:3000 / cards /

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文件...

routes.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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM