首页 > 解决方案 > 为什么我的任何 http 方法都不能在我的新路由器文件夹中工作?我该如何解决?

问题描述

这是我的第一个 Web 开发项目。我基本上是在尝试制作一个简单的网站来销售光剑。目标是能够创建帐户、登录、添加、编辑和删除光剑。能够将它们添加到购物车和结帐。我在 Visual Studio 代码中使用 node.js、express 和 mongoDB。我也在整个过程中学习github。到目前为止,我已经基本设置了网站的布局。我能够创建帐户和登录。我目前坚持创建项目(光剑)并将它们保存在 mongoDB 数据库中。具体来说,我在 routes/items 文件中的 http 方法不起作用,它们以前在 app.js 文件中起作用,但我决定出于组织目的移动所有内容。同样,这是我第一次使用任何这种技术,这个项目正在进行中,任何意见都表示赞赏。谢谢。

这是我的代码:有很多代码没有被使用,而且有点乱。我知道..

app.js 文件:

const express = require("express");
const session = require("express-session");
var mongoose = require("mongoose");
var passport = require("passport");
var bodyParser = require('body-parser');
var localStrategy = require('passport-local');
var passportLocalMongoose = require("passport-local-mongoose");
var router = express.Router();

const app = express();

const indexRouter = require('./routes/index')
const itemsRouter = require('./routes/items')



 //npm install ejs body-parser mongoose passport passport 
    var uri = "mongodb://username:password@cluster0-shard-00-00- 
 hnxfk.mongodb.net:27017,cluster0-shard-00-01- 
 hnxfk.mongodb.net:27017,cluster0-shard-00-02- 
 hnxfk.mongodb.net:27017/test? 
 ssl=true&replicaSet=Cluster0-shard- 
 0&authSource=admin&retryWrites=true&w=majority";
    var localHost = "mongodb://localhost:27017/Project2SamJoshEricRoy"
    mongoose.connect(uri,{useNewUrlParser: true, useUnifiedTopology: 
true });

var User = require('./models/user');
var Item = require('./models/item');

// var app = express();
app.set('view engine', 'ejs');

app.use(bodyParser.urlencoded({extended:true}));
app.use(require('express-session')({

    secret: "application secret shhhh",
    resave: false,
    saveUninitialized: false
}));

passport.use(new localStrategy(User.authenticate()))
passport.serializeUser(User.serializeUser());
passport.deserializeUser(User.deserializeUser());

app.use(express.static(__dirname + '/public'));


app.use(passport.initialize());
app.use(passport.session());


app.use('/', indexRouter)

app.use('/items', itemsRouter)




 //create account 
 app.get("/createAccount",(req,res)=> {
    res.render("createAccount");

});

app.get('/createAccount', function(req,res) {
    res.render('createAccount'); 
});


app.post("/createAccount",(req,res)=> {
    req.body.username;
    req.body.password;
    User.register(new 
User({username:req.body.username}),req.body.password, 
(err,user) =>{
        if(err) {
            console.log(err);

            return res.render("createAccount");
        }
        passport.authenticate("local")(req,res,() => {
            res.redirect('/login');
            console.log(req.body.username
                +  " " + req.body.password);
            console.log(user);

        });

    });
});


//login

app.get("/login",(req,res) => {
    res.render("login")
    User.find(function(err,users) {
        if(err) {
            console.log(err);
        }
        // console.log(users);
    })
});


app.post('/login',passport.authenticate("local",{

    successRedirect: "/lightsabers",
    failureRedirect: "/login"
}),(req,res)=> {

});



function isLoggedIn(req,res,next) {
    console.log("CALL")
    if(req.isAuthenticated()) {
        console.log("logged in ");
        return next();

    }
    res.redirect("/login");
    console.log("error logging in");
}


//logout 

app.get("/logout",(req,res)=> {
    req.logout();
    res.redirect('/');
});


//lightsabers

//app.get("/lightsabers",isLoggedIn,(req,res)=> {
    //res.render("lightsabers",{user: req.user});
    //console.log(req.user);
//});



//shopping cart
app.get("/cart",(req,res)=> {
    res.render("cart");

});

app.get('/createLightsaber',(req,res)=> {
    res.render("newItem",{user:req.User});
    console.log("user is with us");
    console.log(req.user)
});

app.get('/updateItem',(req,res)=> {
    res.render("updateLightsaber");

});

app.get('/deleteLightsaber',(req,res)=> {
    res.render("updateLightsaber");

});

/routes/index.js 文件:

const express = require('express')
const router = express.Router()

router.get('/', (req, res) => {
    res.render('index')
})

module.exports = router

路线/items.js

const express = require('express')
const router = express.Router()
const Item = require('../models/item')

//display page
router.get("/",(req,res)=> {
    res.render("newItem");
});


// all items route
router.get('/', async (req, res) =>{
    try{ 
        const items = await Item.find({})
        res.render('items/newItem', {item: new Item() })

    } catch {
        res.redirect('/')
    }
})

//new item route (display form)
router.get('/newItem', (req, res) => {
    res.render('items/newItem', {item: new Item() })
})

// create new item route (actual creation)
router.post('/newItem', async (req,res) => {
    const item = new Item({
        color:req.body.color,
        price:req.body.price, 
        link:req.body.link
    })
    try{
        const newItem = await item.save()
        res.redirect('lightsabers')
    } catch {
        res.render('items/newItem', {
            item: item,
            errorMessage:'Error creating item'
        })
    }

}) 


/update item 
    app.get("/updateItem",(req,res)=> {
        res.render("updateItem");

    });

module.exports = router

新项目.ejs

<!DOCTYPE html>
<html>
    <head>
        <title> </title>
        <link rel="stylesheet" href="/css/styles.css"/>
    </head>
    <body>

        <h1> Adding New Item </h1>


        <form action="/items" method="POST">
        <h2>

            Color: <input type="text" name="color"><br>    
            Price: <input type="text" name="price"><br>
            Image Link:<input type="text" name="link"><br>


            <br><br>
            <button id="addItem">Add Item</button>

            <%= typeof(message) != "undefined"?message:"" %>
        </h2>

        </form> 
                <form action="/lightsabers">
          <h2><button> Back </button></h2>
        </form>

        <script type="text/javascript" src="../public/app.js"> 
</script>
    </body>
</html>

如果您想查看代码的任何其他部分,请告诉我。我可能忘记了一些重要的事情。

标签: node.jsmongodbexpress

解决方案


推荐阅读