Простые коды в NodeJS MVC - PullRequest
       8

Простые коды в NodeJS MVC

0 голосов
/ 24 апреля 2020

Я использую паспорт и пытаюсь организовать свою структуру кода, например, маршруты (только один маршрут), контроллер с одним методом для обработки маршрута, модель для выполнения некоторых действий, которые исходят из метода контроллера. Следующий код работает нормально, возвращая мне токен, если номер мобильного телефона и пароль совпадают. Но как я могу переоценить код так, чтобы он ломался и становился должным образом, я не хочу помещать что-либо в файл маршрутов. js, но только одну строку, и ничего в контроллере, кроме одного метода, где я хочу поместить все паспортные данные в паспорт . js файл либо config / passport. js, либо root / passport. js

const express = require('express'),
  cors = require('cors'),
  compression = require('compression'),
  morgan = require('morgan'),
  passport = require('passport')
const app = express()
app.use(passport.initialize())
app.use(express.json())
app.use(express.urlencoded({extended: false}))
app.use('/', Router)

Теперь в моем config/routes.js файле

const passport = require('passport')
const userController = require('../app/controllers/users_controller')
const jwt = require('jsonwebtoken')

LocalStrategy = require('passport-local').Strategy
passport.use(
  new LocalStrategy(function (username, password, done) {
    User.findOne({mobile: username}, function (err, user) {
      if (err) {
        return done(err)
      }
      if (!user) {
        return done(null, false, {message: 'Incorrect Username'})
      }
      console.log(` Password: ${password} `)
      if (!user.comparePassword(password)) {
        return done(null, false, {message: 'Incorrect password'})
      }
      return done(null, user)
    })
  })
)

passport.serializeUser(function (user, cb) {
  cb(null, user.id)
})

passport.deserializeUser(function (id, cb) {
  User.findById(id, function (err, user) {
    if (err) {
      return cb(err)
    }
    cb(null, user)
  })
})

router.post('/api/v1/login', function (req, res, next) {
  passport.authenticate('local', {session: false}, (err, user, info) => {
    if (err || !user) {
      return res.status(400).json({
        message: 'Something is not right',
        user: user,
      })
    }

    req.login(user, {session: false}, (err) => {
      if (err) {
        res.send(` Error: ${err}`)
      }
      // generate a signed son web token wtih contents of user
      const token = jwt.sign(user.id, 'your_jwt_secret')
      return res.json({user, token})
    })
  })(req, res)
})

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

router.get('/logout', users_controller.update)
router.post('/forgotPassword', users_controller.update)

Я хочу, чтобы это было похоже на следующий маршрут

router.post('/login', users_controller.login)

Я пробовал много раз, но все еще могу не работал, даже использовал этот код, но на моем другом веб-сайте я использовал тот же метод, и он работал в контроллере, поэтому все связанные с паспортом вещи я кладу в контроллер, но этот тоже не правильно, это должна быть одна строка в файле маршрута и метод в контроллере покоятся в отдельном паспорте. js файлы.

Пожалуйста, вы можете помочь мне, как я могу это сделать?

...