Как экспортировать маршруты в node.js и экспресс? - PullRequest
2 голосов
/ 13 апреля 2019

Моя проблема не полностью в вопросе, но на той же странице.Поэтому я экспортировал маршрут в мой основной файл app.js, но мой почтовый маршрут не работает.Мои проблемы ниже кода, потому что мне нужно, чтобы вы прочитали код, чтобы быть понятными.

Это мой файл, из которого я буду экспортировать маршрут (registration.js):

const express = require("express");
const router = express.Router();
console.log("azerty");
router.post("/register", (req, res)=>{
    console.log("qwerty");
    res.stautus(200).send("hello");
});
module.exports = router;

Это мой основной файл, куда я буду экспортировать маршрут (app.js):

const express = require("express");
const app = express();
...
app.use("/register", require("./registration.js"));

Это моя HTML-форма:

<form action="/register" method="post">
            <input type="text" placeholder="First Name" name="fstName" required/>
            <input type="text" placeholder="Last Name" name="lstName"required/>
            <input type="submit" value="Submit"/>
</form>

У меня есть некоторые другие проблемы, связанныена это:

  • первый: почему azerty регистрируется на консоли, когда я на http://localhost:3000/?
  • второй: почему я продолжаю получать Cannot POST /register и винструмент разработчика ошибка 404?И мой код внутри обработчика маршрутов не запускается.
  • наконец: это правильный путь для экспорта маршрутов (например, использование express.Route() в файле маршрутизации и express() только в основном)?

Ответы [ 4 ]

1 голос
/ 13 апреля 2019

сначала: почему azerty регистрируется на консоли, когда я нахожусь на http://localhost:3000/?

console.log("azerty") находится в области действия файла registration.js, поэтому будет регистрироваться, как только ваша app.js потребует этого.

Этой строки здесь достаточно для запуска журналирования консоли: app.use('/register', require('./registration'));, поскольку модуль требуется, когда Express монтирует его как промежуточное ПО при запуске

секунда: почему я продолжаю получать Cannot POST / register и в инструменте разработчика ошибка 404? И мой код внутри обработчика маршрута не запускается.

Потому что он не смонтирован там, где вы думаете, он смонтирован.

router.post("/register ... Здесь вы смонтированы на пути /register, а затем app.use("/register", require("./registration.js")); здесь вы смонтированы на другом пути /register. Объединив их вместе, вы получите полный путь как /register/register (также проверьте опечатку, упомянутую в комментарии)

Таким образом, чтобы установить на localhost:3000/register, вы должны определить как (Обратите внимание на различия):

router.post("/", (req, res)=>{ ...

// and then
app.use("/register", require("./registration.js"));

// or simply
router.post("/register", (req, res)=>{ ...

// and then
app.use(require("./registration.js"));

наконец: это правильный способ экспорта маршрутов (например, с помощью express.Route () в файле маршрутизации и express () только в главном)?

Да, это прекрасно. Но имейте в виду путь монтирования.

1 голос
/ 13 апреля 2019

Я думаю, что вы добавили префикс к маршруту с помощью app.use ("/ register" ...) и теперь это / register / register

Juste удалите его в app.js или в вашем файле маршрута

const express = require("express");
const router = express.Router();
console.log("azerty");
router.post("/register", (req, res)=>{
    console.log("qwerty");
    res.stautus(200).send("hello");
});
module.exports = router;
const express = require("express");
const app = express();
...

app.use(require("./registration.js"));

Я не знаю, если это правильный путь, вот что я делаю, вроде как ты

//src/app.js
// Import
import postRoutes from './routes/post';
import authRoutes from './routes/auth';

...
// Endpoints

app.use(postRoutes);
app.use(authRoutes);
// src/routes/post.js

...

const Router = express.Router();

/**
 * Routes
 */

Router.get('/post', getPosts);
Router.post('/post', isAuth,  creationValidation(), createPost);
Router.put('/post/:id', isAuth, editValidation(), putPost);
Router.delete('/post/:id', isAuth, deletePost);



/**
 * Export
 */
export default Router;
1 голос
/ 13 апреля 2019

Во-первых, azerty регистрируется, потому что он не вложен ни в какие функции. Он просто войдет во время выполнения, и вы на http://localhost:3000/ не будете иметь никакого влияния на это.

Во-вторых, вы Cannot POST /register, потому что при использовании маршрутизатора root является первым параметром, передаваемым app.use - в вашей текущей настройке /register/register - это маршрут. Чтобы это исправить, измените первый параметр router.post в registration.js на /:

const express = require("express");
const router = express.Router();
console.log("azerty");
router.post("/", (req, res)=>{
    console.log("qwerty");
    res.status(200).send("hello");
});
module.exports = router;

Наконец, для экспорта маршрутов это самая распространенная настройка, которую я вижу.

1 голос
/ 13 апреля 2019

azerty был зарегистрирован в консоли, что означает, что маршрут был импортирован, и он работал.

Вы уже правильно экспортировали маршрут. Я думаю, что вы должны использовать return до res.stautus(200).send("hello"); в registation.js. Вот так:

const express = require("express");
const router = express.Router();
console.log("azerty");
router.post("/", (req, res)=>{
    console.log("qwerty");
    return res.stautus(200).send("hello");
});
module.exports = router;

Чтобы использовать этот почтовый запрос, API выглядит так: localhost:3000/register

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...