如何使用Express中当前路由的数据重定向到先前的路由?

时间:2019-10-26 11:13:18

标签: javascript node.js mongodb express ejs

我有一个PC建立帮助网站。主页上有类别列表。我单击类别的“选择”按钮,然后将我带到该类别的产品列表的页面。我通过单击选择一个产品,它将带我回到我的主页,并且该产品的名称应打印在该类别的旁边。

我正在使用节点js,express和ejs进行此操作。我的主页有一个默认的“ /”路由(可通过键入localhost:3000访问)。当我单击select时,它将转到“ / product”路由(localhost:3000 / product),类别名称位于该页面的顶部。我单击选择一个产品,它将带我回到路线“ /”的主页,在类别旁边显示产品名称。

我无法执行此操作。我无法通过使用res.redirect()将数据从“ / product”路由传递到我的“ /”路由或首页。相反,我将主页渲染到“ / product”路线上。因此,我能够在此路由中使用该数据。我想使用从/ product路由中选择的数据重定向到我的本地路由,并希望将该数据用于本地路由。

我已经搜索了诸如“如何使用express和node js将数据传递到先前路线的参考资料”之类的参考资料,但是没有找到对我的项目有用的信息。

const express = require("express");
const bodyParser = require("body-parser");
const mongoose = require("mongoose");

const app = express();

app.set('view engine', 'ejs');

app.use(bodyParser.urlencoded({extended: true}));
app.use(express.static("public"));

mongoose.connect("mongodb://localhost:27017/productDB", {useNewUrlParser: true});

//Database Part Start

const listProcessor = new mongoose.Schema({
    name: String,
    core: Number,
    thread: Number
});

const ListProcessor = mongoose.model("ListProcessor", listProcessor);

const item1 = new ListProcessor({
    name: "AMD Ryzen 5 3600",
    core: 6,
    thread: 12,
    price: 17100
});
const item2 = new ListProcessor({
    name: "AMD Ryzen 7 3700x",
    core: 8,
    thread: 12,
    price: 30000
})

const processorArray = [item1, item2];

//Database Part end
//server part and get post part start

app.get("/", function(req, res){
    res.render("buildown", {name: "Not Specified", price: "Not Specified"});
});

app.post("/", function(req, res){
    const signal = req.body.choose;
    if(signal === "cpu")
    {
        ListProcessor.find({}, function(err, items){
            if(items.length === 0)
            {
                ListProcessor.insertMany(processorArray);
                res.redirect("/product");
            }
            else{
                res.redirect("/product");
            }
        });

    }
});

app.get("/product", function(req, res){
    res.render("list", {listTitle: "Processor", listOfProduct: processorArray}); //Using EJS passing data from processorArray
});
app.post("/product", function(req, res){
    const nameItem = req.body.select;
    ListProcessor.find({nameItem}, function(err, items){
        console.log(items);
        res.render("buildown", {name: nameItem, price: items.price});
    });
});

app.listen(3000, function(){
    console.log("Server Up and Running");
});

//Get Post part end

此代码首先将主页呈现为带有类别的“ /”路由,以及类别旁边的“未指定”文本。单击选择按钮后,将我重定向到“ / product”路由,其中​​包含来自mongo DB数据库数据的列表我在这里创建。单击“选择”后,它将主页显示到该“ /产品”路径中,并使用数据和产品名称代替“未指定”文本。

这没关系,但我不想在此路线上呈现主页。相反,整个动作将在“ /”路径上进行。因此,我将从“ / products”路由中选择数据,立即将其重定向到“ /”路由,并从“ / product”路由中选择数据并将在此处使用。

您能告诉我如何执行此操作吗?仅使用express和node js。

0 个答案:

没有答案