簡體   English   中英

具有兩個MongoDB集合查詢的ExpressJS路由

[英]ExpressJS Routing with Two MongoDB Collections Query

我目前有一個建模的集合,該集合顯示與模型中兩個屬性的查詢匹配的所有文檔。 這兩個屬性顯示在我的url路徑中,並通過從路由中獲取兩個屬性並顯示與這些值匹配的文檔來觸發生成的路由。 例如:“紅色”,“日期”:“星期一”,如果顯示的網址帶有/ red / monday,則顯示所有具有這些值的文檔(圖像)。 我當前的路線正確執行了此查詢。

現在,我想創建第二個集合,其中包含對“顏色”和“日期”的每種可能組合的描述。 基本上,當我轉到/ red / monday時,將顯示圖像,然后還會顯示說明。

我不確定在路由內的一個查詢中結合這兩種組合的最佳方法。 有什么幫助嗎?

圖片模型:

var mongoose = require('mongoose');
var Schema = mongoose.Schema;

var imageSchema = new Schema({
    day: { type: String, enum: ['Monday', 'Tuesday', 'Wednesday'] },
    color: { type: String, enum: ['Black', 'Blue', 'White'] },
    imageName: String,
    imageUrl: String,
    imageSource: String
});

var Images = mongoose.model('Images', imageSchema);

module.exports = Images;

描述型號:

var mongoose = require('mongoose');
var Schema = mongoose.Schema;

var descriptionSchema = new Schema({
    pattern: { type: String, enum: ['Monday', 'Tuesday', 'Wednesday'] },
    color: { type: String, enum: ['Black', 'Blue', 'White'] },
    body: String,
});

var Description = mongoose.model('Description', descriptionSchema);

module.exports = Description;

當前路由:

var express = require('express');
var router  = express.Router();
var Images = require('./models/imagesModel');
var Description = require('./models/descriptionModel');

    /*==== Color Pages  ====*/

    router.get('/:color/day-selection', function(req, res){

        console.log(req.params.color);

        res.render('pages/color.hbs', {
            color: req.params.pattern
        });
    });


    /*====  Results ====*/


    router.get('/:color/:day/result', function(req, res){

        console.log(req.params.color);

        Images.find( { pattern: req.params.color, color: req.params.day }, function(err, image){
            if (err) { console.log(err); }
            console.log(image);

            res.render('pages/result.hbs', {
                color   : req.params.color,
                day : req.params.day,
                image : image
            });
        });
    });

我會嘗試使URL更加RESTful。

每天獲取所有顏色的網址就像

route.get(':days') =>服務GET /mondays >獲取星期一所有顏色的列表。

route.get('/days') =>服務GET /days route.get('/days') >獲取所有日期的列表

route.get(':days/:colors') =>服務GET /mondays/reds >獲取星期一的紅色描述。

route.get(':day/:color/images') =>服務器獲取/mondays/reds/images >獲取/mondays/reds/images所有/mondays/reds/images

route.get(':days/:colors/images/:id') =>服務GET :days/:colors/images/:id =>服務於/mondays/reds/images/mongo-db-id >得到那個特定的圖像

其他一些變化,

  1. 將服務層代碼移出路由器,並將其注入express()實例中。 示例,請閱讀無恥的插件-https: //github.com/swarajgiri/express-bootstrap/blob/master/bootstrap/app.js#L86
  2. 將數據庫連接作為參數傳遞給服務層。 https://github.com/swarajgiri/express-bootstrap/blob/master/core/index.js
  3. (可選)-使用Promise和生成器進行流量控制。 例如-https: //gist.github.com/swarajgiri/16202e32aa4d80d45c62

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM