简体   繁体   English

路由不能正常工作,这是为什么呢?

[英]routing does not work correctly, why is that?

I used postman to post to register a user with "http://localhost:3000/register?name=USER1&email=user1@testsite.com&password=pass1" and seems like it doesn't get routed correctly.我使用postman post以使用"http://localhost:3000/register?name=USER1&email=user1@testsite.com&password=pass1"注册user ,并且似乎没有正确路由。 What could be the problem?可能是什么问题呢?

Errors: Postman shows Cannot POST /register .错误: Postman 显示Cannot POST /register Other than that, no errors, server runs ok in port 3000除此之外,没有错误,服务器在端口 3000 中运行正常

App.js应用程序.js

require('dotenv').config();  
const passport = require('passport');
require("./app_api/passport")
const path = require("path");
const express = require("express");
const bodyParser = require("body-parser");
const mongoose = require("mongoose");
const app = express();
const userRoutes = require("./app_api/routes/index");

 
mongoose
  .connect(   
    "mongodb://127.0.0.1:27017"  
    , {useNewUrlParser: true, useUnifiedTopology: true, useCreateIndex:true}
  )  .then(() => {
    console.log("Connected to database!");
  })
  .catch(() => {
    console.log("Connection failed!");
  });
 
app.use(passport.initialize());  
app.use((req, res, next) => {  
  res.setHeader("Access-Control-Allow-Origin", "*");
  res.setHeader(
    "Access-Control-Allow-Headers",
    "Origin, X-Requested-With, Content-Type, Accept, Authorization"  
  );
  res.setHeader(
    "Access-Control-Allow-Methods",
    "GET, POST, PATCH, PUT, DELETE, OPTIONS"
  );
  next();
});

app.use("/register", userRoutes);

module.exports = app;

./routes/index.js ./routes/index.js

const express = require("express");
const ctrlAuth = require("../../controllers/authentication");
const router = express.Router();

router.post('/register', function(req, res){ctrlAuth.register});
router.post('/login', function(req, res){ctrlAuth.login});

module.exports = router;

./controllers/authentication.js ./controllers/authentication.js

const passport = require('passport');
const mongoose = require('mongoose');
const User = require('../schema/user');  

const register = (req, res) => {
  if (!req.body.name || !req.body.email || !req.body.password) {  
  return res
  .status(400)
  .json({"message": "All fields required"});  
  const user = new User();
  user.name = req.body.name;
  user.email = req.body.email;
  user.setPassword(req.body.password);
  user.save((err) => {  
  if (err) {  
  res  
  .status(404)
  .json(err);
  } else {  
  const token = user.generateJwt();
  res  
  .status(200)  
  .json({
    token  
    ,message: "User created!"  
  });
  }
  });
};

module.exports = { 
register
};

const login = (req, res) => {
  if (!req.body.email || !req.body.password) {
  return res
  .status(400)
  .json({"message": "All fields required"});
  }
  passport.authenticate('local', (err, user, info) => {
  let token;
  if (err) {
  return res
  .status(404)
  .json(err);
  }
  if (user) {
  token = user.generateJwt();
  res
  .status(200)
  .json({token});
  } else {
  res
  .status(401)
  .json(info);
  }
  })(req, res);
  };


  module.exports = {
    
    login
    };

change ./controllers/authentication.js exports functions like this更改./controllers/authentication.js导出这样的函数

const passport = require("passport");
const mongoose = require("mongoose");
const User = require("../schema/user");

const register = (req, res) => {
  if (!req.body.name || !req.body.email || !req.body.password) {
    return res.status(400).json({ message: "All fields required" });
  }
  const user = new User();
  user.name = req.body.name;
  user.email = req.body.email;
  user.setPassword(req.body.password);
  user.save((err) => {
    if (err) {
      res.status(404).json(err);
    } else {
      const token = user.generateJwt();
      res.status(200).json({
        token,
        message: "User created!",
      });
    }
  });
};

const login = (req, res) => {
  if (!req.body.email || !req.body.password) {
    return res.status(400).json({ message: "All fields required" });
  }
  passport.authenticate("local", (err, user, info) => {
    let token;
    if (err) {
      return res.status(404).json(err);
    }
    if (user) {
      token = user.generateJwt();
      res.status(200).json({ token });
    } else {
      res.status(401).json(info);
    }
  })(req, res);
};

exports.register = register;
exports.login = login;

and change your App.js, remove /register from route并更改您的 App.js,从路由中删除/register

require('dotenv').config();  
const passport = require('passport');
require("./app_api/passport")
const path = require("path");
const express = require("express");
const bodyParser = require("body-parser");
const mongoose = require("mongoose");
const app = express();
const userRoutes = require("./app_api/routes/index");

 
mongoose
  .connect(   
    "mongodb://127.0.0.1:27017"  
    , {useNewUrlParser: true, useUnifiedTopology: true, useCreateIndex:true}
  )  .then(() => {
    console.log("Connected to database!");
  })
  .catch(() => {
    console.log("Connection failed!");
  });
 
app.use(passport.initialize());  
app.use((req, res, next) => {  
  res.setHeader("Access-Control-Allow-Origin", "*");
  res.setHeader(
    "Access-Control-Allow-Headers",
    "Origin, X-Requested-With, Content-Type, Accept, Authorization"  
  );
  res.setHeader(
    "Access-Control-Allow-Methods",
    "GET, POST, PATCH, PUT, DELETE, OPTIONS"
  );
  next();
});

app.use("/", userRoutes);

module.exports = app;

change router like this:像这样更改路由器:

const express = require("express");
const ctrlAuth = require("../../controllers/authentication");
const router = express.Router();

router.post('/register', ctrlAuth.register);
router.post('/login', ctrlAuth.login);

module.exports = router;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM