Использование мангуста на нескольких маршрутах с экспресс

#node.js #express #mongoose #export #router

Вопрос:

Я настроил свой код в server.js что сработало отлично. Сейчас я пытаюсь навести порядок в server.js код путем разделения кода на разные маршруты.

Я пользуюсь экспрессом.Маршрутизатор, чтобы связать файлы, но я изо всех сил пытаюсь понять, почему мой почтовый маршрут тормозит.

В server.js файл

 // dependencies
const express = require("express");
const bodyParser = require("body-parser");
const app = express();
app.use(bodyparser.urlencoded({extended: true}));
app.set('view engine', 'ejs');

// routes
constpurchaseOrders = require("./routes/purchaseOrders");
app.use("/purchaseOrders", purchaseOrders);

// listen
app.listen(3000, function(){
console.log("Server started on port 3000");
});
 

В purchaseOrders.js файл

 // dependencies
const express = require("express");
let router = express.Router();
const mongoose = require("Mongoose");
const connection = require("../routes/mongoose.js");
const Po = require("../routes/schemas.js:);

// post route
router.post("/addpo, function(req.res){
//long code lines here  
po.save();
res.redirect("/");
});

module.exports = router;
 

Итак, с этим маршрутом у меня есть следующая конечная точка на маршруте.получить:

 10.0.0.15:3000/purchaseOrders/addpo
 

Теперь проблема возникает, когда я отправляю форму, она возвращает «не удается опубликовать /добавить», и конечная точка показывает:

 10.0.0.15:3000/addpo
 

В моем файле ejs я настроил форму следующим образом:

 <form action="/addpo" method="post">
 

На mongoose.js соединение, которое я экспортирую следующим образом:

 module.exports = mongoose;
 

На schemas.js я экспортирую:

 module.exports = Po;
 

Я знаю, что сделал что-то не так с маршрутизацией, но я не могу понять, почему.

Большое спасибо 🙂

Комментарии:

1. Я предполагаю, что эта ошибка только в вопросе, но кавычки неверны.

Ответ №1:

если вам нужен /addpo путь для работы, измените его на server.js :

 app.use("/", purchaseOrders);
 

НЕ

 app.use("/purchaseOrders", purchaseOrders);
 

Другой вариант

server.js:

 app.use("/addpo", purchaseOrders);
 

purchaseOrders.js

 router.post("/", function(req.res){
 

Если вы добавите маршрут перед вызовом маршрутизатора, он будет добавлен перед ним.

Таким образом, вы можете использовать маршрут action="/addpo" в html.

Экспресс-документы

Комментарии:

1. Что ж, это сработало как по волшебству. Спасибо тебе, Хорхе. Единственное, чего я не понимаю, это то, что я ожидаю 10.0.0.15:3000/Заказы на покупку/addpo. Но теперь сообщение работает, потому что оно показывает конечную точку 10.0.0.15:3000/addpo. Знаете ли вы, есть ли способ, чтобы сообщение работало с полными /покупными заказами/addpo. вместо просто /addpo?

2. @Jax да, просто измените действие: действие=»/PurchaseOrders/addpo» и сохраните код в том виде, в каком он у вас был. Если вы нашли ответ полезным, я был бы признателен, если бы вы приняли его. С уважением.

3. Спасибо @Jorge Montejo. Хорошо, что вы помогли мне заставить код работать так, как это было до маршрутизации. Что ломает мой мозг, так это то, что действие=»/PurchaseOrders/addpo» было первым, что я попробовал, что имело для меня смысл, но оно все еще дает мне «не могу опубликовать /addpo» с 10.0.0.15:3000/addpo.