Node.js / Express发布请求失败

时间:2019-03-27 17:58:04

标签: node.js express post

我在Node.js / Express中有一个简单的CRUD应用程序。这是一种订单接收表单,用于将数据发布到MongoDB集合中。

我一辈子都无法理解为什么这个POST(创建)路由没有成功。我整个上午一直在进行故障排除。经console.logs验证,我的其他路由运行得很好。

这是我的订单路线文件(/routes/orders.js):

var express     = require("express");
var router      = express.Router();
var Order    = require("../models/order.js");

// Load Keys ===================================================================
const keys = require('../config/keys'); 


// INDEX ROUTE - show all orders
router.get("/", isLoggedIn, function(req, res){
    // Get all orders from DB
    Order.find({}, function(err, allOrders){
        if(err){
            console.log(err);
        } else {
            res.render("orders", {orders:allOrders});
        //Test to see if this returns the number of records in the collection
            console.log("There are currently " + allOrders.length + " orders."); 
        }
    });
});

// CREATE ROUTE - add new order to the DB
router.post("/", isLoggedIn, function(req, res){
    // get data from form and add to newOrder object
    var date = req.body.date;
    var territory = req.body.territory;
    var principal = req.body.principal;
    var customer = req.body.customer;
    var representative = req.body.representative;
    var amount = req.body.amount;
    var newOrder = {date: date, territory: territory, principal: principal, customer: customer, representative: representative, amount: amount};
    // Create a new order and save to DB
    Order.create(newOrder, function (err, newlyCreated){
        if(err){
            console.log(err);
        } else {
            //redirect back to orders page
            res.redirect("/");
            console.log("New order created (orders route file).");
        }
    });
});


// NEW ROUTE - show form to create new customer
router.get("/new", isLoggedIn, function(req, res){
    res.render("new.ejs");
    console.log("This is coming from the order route js file.");
});

这是我的new.ejs模板文件,格式为:

<div class="container container-new py-5">
    <div class = "row">
        <div class="col-lg-12 orders-title">
            <h2>New Order</h2>
        </div>
    </div>
    <div class="row">
        <div class="col-md-10 mx-auto">
            <form action="/orders" method="POST">
                <div class="form-group row">
                    <div class="col-sm-3">
                        <label for="inputDate">Date</label>
                        <input type="text" class="form-control" id='datetimepicker' name="date">
                    </div>
                    <div class="col-sm-3">
                        <label for="inputTerritory">Territory</label>
                        <select id="selectTerr" class="form-control" name="territory">
                            <option>Choose a territory</option>
                        </select>
                    </div>
                    <div class="col-sm-6">
                        <label for="inputPrincipal">Principal</label>
                        <select id="selectPrin" class="form-control" name="principal">
                            <option>Choose a principal</option>
                        </select>
                    </div>
                </div>
                <div class="form-group row">
                    <div class="col-sm-5">
                        <label for="inputCustomer">Customer</label>
                        <select id="selectCust" class="form-control" name="customer">
                            <option>Choose a customer</option>
                        </select>
                    </div>
                    <div class="col-sm-4">
                        <label for="inputRepresentative">Sales Rep</label>
                        <select id="selectRep" class="form-control" name="representative">
                            <option>Choose a rep</option>
                        </select>
                    </div>
                    <div class="col-sm-3">
                        <label for="inputState">Total</label>
                        <input type="text" class="form-control" id="inputTotal" name="amount">
                    </div>
                </div>
                <div class="form-group new-buttons">
                    <button type="button" class="btn btn-cancel btn-default btn-primary px-4">Clear</button>
                    <button type="button" class="btn btn-submit btn-default btn-primary px-4">Submit</button>
                </div>

            </form>

        </div>
    </div>
    <div class = "row row-back">
        <div class="col-lg-12 orders-title">
            <a href="/">Back to Main</a>
        </div>
    </div>

</div>

app.js:

var express                 = require("express"),
    app                     = express(),
    bodyParser              = require("body-parser"),
    mongoose                = require("mongoose"),
    passport                = require("passport"),
    LocalStrategy           = require("passport-local"),
    passportLocalMongoose   = require("passport-local-mongoose"),
    methodOverride          = require("method-override"),
    seedDB                  = require("./seeds");

// seedDB();

// Requiring Routes ============================================================
var ordersRoutes            = require("./routes/orders"),
    indexRoutes             = require("./routes/index");

// Load Keys ===================================================================
const keys                  = require('./config/keys');    

// Map global promises
mongoose.Promise            = global.Promise;

// Mongoose Connect ============================================================

mongoose.connect(keys.mongoURI, {
    useMongoClient: true
})
    .then(() => console.log('MongoDB Connected'))
    .catch(err => console.log(err));

//==============================================================================
app.use(express.static('public'));


app.use(bodyParser.urlencoded({extended: true}));
app.set('view engine', 'ejs');
app.set('views', __dirname + '/views');

app.use(methodOverride("_method"));

app.use(indexRoutes);
app.use("/orders", ordersRoutes);

const port = process.env.PORT || 5000;

app.listen(port, () => console.log(`server started on port ${port}`));

0 个答案:

没有答案