简体   繁体   English

无法获取节点js错误

[英]Cannot GET node js error

I can't figure out where I missed to add something. 我不知道我错过了什么。 I get the following error: Cannot GET /portal/destroybox/5797318673cf3f581163455c when I click on delete or update icons in portal.ejs : 我收到以下错误:当我单击Cannot GET /portal/destroybox/5797318673cf3f581163455c删除或更新图标时, Cannot GET /portal/destroybox/5797318673cf3f581163455c portal.ejs

( createbox in portal.ejs works and creates the item and stores it in the db, and then I forEach in the table to show all items with update and delete icons behind each item. Also the // todo test part in server.js is for another part of my app and that works, nothing to do with the portal/box part. I also do not have route in server.js for createbox, but that part works, so why do I need it for destroybox if I need it at all?) portal.ejs createbox portal.ejs工作并创建该项目并将其存储在db中,然后我在表中forEach来显示所有项目,并在每个项目后面显示更新和删除图标。此外, // todo test server.js中的// todo test部分是对于我的应用程序的另一部分,它可以正常工作,与门户/盒子部分无关。我也没有在server.js中创建createbox的路由,但是那部分工作,所以为什么我需要它用于destroybox?完全吗?)

portal.ejs

<table class="table">
    <thead>
        <tr>
            <th>Name</th>
            <th>Vm</th>
            <th>Update</th>
            <th>Delete</th>
        </tr>
    </thead>
    <tbody>
        <% boxes.forEach( function ( box ){ %>
            <tr>
                <td>
                    <%= box.box_name %>
                </td>
                <td>
                    <%= box.vm %>
                </td>
                <td>
                    <a class="fa fa-wrench" aria-hidden="true" href="/portal/editbox/<%= box._id %>" title="Update this box"></a>
                </td>
                <td>
                    <a class="fa fa-trash-o" aria-hidden="true" href="/portal/destroybox/<%= box._id %>" title="Destroy this box"></a>
                </td>
            </tr>
            <% }); %>
    </tbody>
</table>

<p>
    <strong>Add new box to `available boxes`</strong>
    <br>
</p>

<form action="/createbox" method="post">
    <div class="form-group">
        <label>Box name</label>
        <input type="text" class="form-control" name="box_name">
    </div>
    <div class="form-group">
        <label>VM</label>
        <input type="text" class="form-control" name="vm">
    </div>
    <div class="form-group">
        <label>Description</label>
        <input type="text" class="form-control" name="description">
    </div>
    <button type="submit" class="btn btn-warning btn-lg">Add box</button>
</form>

server.js

// server.js

// set up ======================================================================
// get all the tools we need

// mongoose setup
var db = require('./config/database.js');

require('./app/models/db');
require('./app/models/box');

var express = require('express');
var http = require('http');
var path = require('path');
var engine = require('ejs-locals');
var favicon = require('serve-favicon');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var methodOverride = require('method-override');
var logger = require('morgan');
var errorHandler = require('errorhandler');
var static = require('serve-static');

var app = express();
var port = process.env.PORT || 8080;
var mongoose = require('mongoose');
var passport = require('passport');
var flash = require('connect-flash');
var session = require('express-session');

var routesindex = require('./routes/index');
//var routesbox = require('./routes/boxi');


// configuration ===============================================================
mongoose.connect(db.url); // connect to our database

require('./config/passport')(passport); // pass passport for configuration

// set up our express application
app.engine('ejs', engine);
app.use(logger('dev')); // log every request to the console
app.use(cookieParser()); // read cookies (needed for auth)
app.use(bodyParser()); // get information from html forms
app.use(favicon(__dirname + '/public/favicon.ico'));
app.use(methodOverride());
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({
    extended: true
}));

app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs'); // set up ejs for templating

// required for passport
app.use(session({
    secret: 'secretkeykeykeykey'
})); // session secret
app.use(passport.initialize());
app.use(passport.session()); // persistent login sessions
app.use(flash()); // use connect-flash for flash messages stored in session

// routes ======================================================================
var routes = require('./app/routes/routes')(app, passport); // load our routes and pass in our app and fully configured passport

// todo test
app.use(routesindex.current_user);
app.get('/ind', routesindex.ind); 
app.post('/ind/create', routesindex.create);
app.get('/ind/destroy/:id', routesindex.destroy);
app.get('/ind/edit/:id', routesindex.edit);
app.post('/ind/update/:id', routesindex.update);

app.use(static(path.join(__dirname, 'public')));

// launch ======================================================================
app.listen(port);
console.log('The magic happens on port ' + port);

routes.js

// =====================================
    // PORTAL ==============================
    // =====================================
    // show the signup form
    app.get('/portal', isLoggedIn, function (req, res) {
        var user_id = req.cookies ?
            req.cookies.user_id : undefined;

        Box.
        find({
            user_id: user_id
        }).
        sort('-updated_at').
        exec(function (err, boxes) {
            if (err) return next(err);

            res.render('portal', {
                boxes: boxes
            });
        });
    });

    app.post('/createbox', isLoggedIn, function (req, res) {
        new Box({
            user_id: req.cookies.user_id,
            box_name: req.body.box_name,
            vm: req.body.vm,
            description: req.body.description,
            updated_at: Date.now()
        }).save(function (err, box, count) {
            if (err) return next(err);

            res.redirect('/portal/');
        });
    });

    app.get('/destroybox/:id', isLoggedIn, function (req, res) {
        Box.findById(req.params.id, function (err, box) {
            var user_id = req.cookies ?
                req.cookies.user_id : undefined;

            if (box.user_id !== user_id) {
                return utils.forbidden(res);
            }

            box.remove(function (err, box) {
                if (err) return next(err);

                res.redirect('/portal/');
            });
        });
    });

    app.get('/editbox/:id', isLoggedIn, function (req, res) {
        var user_id = req.cookies ?
            req.cookies.user_id : undefined;

        Box.
        find({
            user_id: user_id
        }).
        sort('-updated_at').
        exec(function (err, boxes) {
            if (err) return next(err);

            res.render('editbox', {
                title: 'Vagrant Box',
                boxes: boxes,
                current: req.params.id
            });
        });
    });

    app.post('/updatebox/:id', isLoggedIn, function (req, res) {
        Box.findById(req.params.id, function (err, box) {
            var user_id = req.cookies ?
                req.cookies.user_id : undefined;

            if (box.user_id !== user_id) {
                return utils.forbidden(res);
            }

            box.box_name = req.body.box_name;
            box.vm = req.body.vm;
            box.description = req.body.description;
            box.updated_at = Date.now();
            box.save(function (err, box, count) {
                if (err) return next(err);

                res.redirect('/portal/');
            });
        });
    });

Because you don't have routes for that as the error states: 因为您没有路线,因为错误指出:

app.get('/destroybox/:id'

You can see you have a route from root / to destroybox then :id etc. While you are having a href of: 您可以看到您有一个从root /destroybox的路径,然后是:id等。当您的href为:

 href="/portal/destroybox/<%= box._id %>" 

from root / to portal and then destroybox then the id . root /Portal ,然后从destroyboxid Which is no where defined in the config. 在配置中没有定义的地方。


Solution is to change the href to: 解决方案是将href更改为:

href="/destroybox/<%= box._id %>" 

same goes for other href attributes too. 其他href属性也是如此。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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