Middleware не работает, если я меняю конечную точку - PullRequest
0 голосов
/ 10 февраля 2019

У меня странная проблема с моим NodeJs - сервером Express, который служит в качестве внутреннего сервера для моего мобильного приложения.Дело в том, что я отправляю почтовые запросы на некоторые конечные точки, такие как checkmail, checkusername из внешнего интерфейса, используя axios, и это работает, но проблема в том, что он не работает для любой другой функции промежуточного программного обеспечения.Я буквально скопировал один и тот же чекмейл и просто использовал другой маршрут, и я получил статус 404, а с / checkmail это работает!Также / логин не работает, я использую Express.Router там.Вот мой код app.js:

const express = require("express");
const mongoose = require("mongoose");
const bodyParser = require("body-parser");
var cors = require("cors");
const User = require("./models/user");
var AuthController = require('./auth/authController');
const app = express();
let server = require("http").Server(app);

app.use(cors());
app.use(
  bodyParser.urlencoded({
  extended: true
})
);
app.use(bodyParser.json());

 //Check if e-mail is aready in use, return "success" if not
app.use("/signup", (req, res) => {
  User.findOne({
  email: req.body.email
  },
  function (err, user) {
  if (user) {
    res.send("error");
  } else {
    res.send("success");
   }
 }
);
});

//Check if e-mail is aready in use, return "success" if not
app.use("/checkmail", (req, res) => {
  User.findOne({
  email: req.body.email
  },
  function (err, user) {
  if (user) {
    res.send("error");
  } else {
    res.send("success");
  }
 }
 );
});



app.use('/login', AuthController);

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

server.listen(port, () => {});

Ответы [ 2 ]

0 голосов
/ 15 февраля 2019

Вы должны иметь третий параметр в промежуточном программном обеспечении, это обратный вызов, чтобы указать приложению перейти на следующий маршрут.

app.use('/signup', (req, res, next) => { // Normal middleware, it must have 3 parameters
  User.findOne({
     email: req.body.email
   },
   function (err, user) {
   if (user) {
     next(new Error('Some thing wrong')); // Failed, we will go to error-handling middleware functions
   } else {
     next(); // Success and we will go to next route
   }
  }
 );
});

app.get('/signup', (req, res, next) => { // This is "next route"
  res.send('Yay, welcome to signup')
});

app.use((err, req, res, next) => { //  error-handling middleware function, It must have 4 parameters
  res.status(500).send(err)
});

Документ можно найти здесь: https://expressjs.com/en/guide/error-handling.html

0 голосов
/ 10 февраля 2019

Промежуточное программное обеспечение должно иметь следующий третий параметр.

app.use("/checkmail", (req,res,next)=>{
//do something
})
...