我的NodeJs-Express服务器有一个奇怪的问题,它充当我的移动应用程序的后端。 事实是,我使用axios从前端向某些端点(如checkmail,checkusername)发送了发布请求,并且可以正常工作,但问题是它不适用于任何其他中间件功能。我从字面上复制了相同的支票邮件,只是使用了不同的路由,而使用/ checkmail时,我的状态为404! 另外/ login也不起作用,我在那里使用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, () => {});
答案 0 :(得分:0)
中间件接下来应该有第三个参数。
app.use("/checkmail", (req,res,next)=>{
//do something
})
答案 1 :(得分:0)
您必须在中间件中有第三个参数,它是告诉应用程序转到下一条路线的回调。
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