javascript - 用户名条目在 mongodb nodejs 中全部显示为 'null'

标签 javascript node.js mongodb

我正在开始使用 Node.js 并尝试为我的 Web 应用程序创建用户身份验证系统。我正在 YouTube 上观看教程,并遵循了每一步。当涉及到实际注册我的用户时。收集中的用户名条目显示为空。我不确定为什么会发生这种情况,而且我是 javascript 和 Node js 的菜鸟。我正在使用 Passport、express 和 mongodb 模块。

这是我正在观看的视频'https://www.youtube.com/watch?v=m2ZzRZemc98 ' 如果有人知道如何解决我的问题,请回复

谢谢

这是我的主要 app.js

var express = require("express");
var path = require("path");
var cookieParser = require("cookie-parser");
var logger = require("morgan");

const MongoClient = require("mongodb").MongoClient;
const passport = require("passport");
const Strategy = require("passport-local").Strategy;
const session = require("express-session");
const flash = require("connect-flash");
const authUtils = require("./utils/auth");
const hbs = require("hbs");

var indexRouter = require("./routes/index");
var usersRouter = require("./routes/users");
const authRouter = require("./routes/auth");

var app = express();

//Connet to MongoDB database
MongoClient.connect("mongodb://localhost", (err, client) => {
  if (err) {
    throw err;
  }

  const db = client.db("user-profiles");
  const users = db.collection("users");
  app.locals.users = users;
});

//Passport streategy
passport.use(
  new Strategy((username, passport, done) => {
    app.locals.users.findOne({ username }, (err, user) => {
      if (err) {
        return done(err);
      }

      if (!user) {
        return done(null, false);
      }

      if (user.password != authUtils.hashPassword(password)) {
        return done(null, false);
      }

      return done(null, user);
    });
  })
);

passport.serializeUser((user, done) => {
  done(null, user._id);
});

passport.deserializeUser((id, done) => {
  done(null, { id });
});

// view engine setup
app.set("views", path.join(__dirname, "views"));
app.set("view engine", "hbs");
hbs.registerPartials(path.join(__dirname, "views/partials"));

app.use(logger("dev"));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, "public")));
app.use(
  session({
    secret: "session secret",
    resave: false,
    saveUninitialized: false
  })
);

app.use(passport.initialize());
app.use(passport.session());
app.use(flash());

app.use((req, res, next) => {
  res.locals.loggedIn = req.isAuthenticated();
  next();
});
app.use("/", indexRouter);
app.use("/users", usersRouter);
app.use("/auth", authRouter);

// catch 404 and forward to error handler
app.use(function(req, res, next) {
  next(createError(404));
});

// error handler
app.use(function(err, req, res, next) {
  // set locals, only providing error in development
  res.locals.message = err.message;
  res.locals.error = req.app.get("env") === "development" ? err : {};

  // render the error page
  res.status(err.status || 500);
  res.render("error");
});

module.exports = app;

这是我的 auth.js

const router = express.Router();
const authUtils = require("../utils/auth");
const passport = require("passport");

router.get("/login", (req, res, next) => {
  const messages = req.flash();
  res.render("login", { messages });
});

router.post(
  "/login",
  passport.authenticate("local", {
    failureRedirect: "/auth/login",
    failureFlash: "Wrong username or password"
  }),
  (req, res, next) => {
    res.redirect("/users");
  }
);

router.get("/register", (req, res, next) => {
  const messages = req.flash();
  res.render("register", { messages });
});

router.post("/register", (req, res, next) => {
  const registrationParams = req.body;
  const users = req.app.locals.users;
  const payload = {
    username: registrationParams.username,
    password: authUtils.hashPassword(registrationParams.password)
  };

  users.insertOne(payload, err => {
    if (err) {
      req.flash("error", "User account already exists");
    } else {
      req.flash("success", "User account was registered succesfully");
    }

    res.redirect("/auth/register");
  });
});

router.get("/logout", (req, res, next) => {
  req.session.destroy();
  res.redirect("/");
});

module.exports = router;




最佳答案

我修复了我的错误,这是我在 Handlebars 文件中犯的错误,我将输入名称设置为 none 表单控件的类,然后重新命名。显然,js 查看的是第一个名字,而不是第二个名字

关于javascript - 用户名条目在 mongodb nodejs 中全部显示为 'null',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59601954/

相关文章:

javascript - SASS 输出样式通过缩小文件实现自动化

javascript - 在 sails.js 中返回异步响应

mongodb - 如何将 Robomongo 连接到 MongoDB

java - 如何使用java更新mongodb文档中的特定值

javascript - 如何使用 node.js 添加到 mongoose 中的数组

java - MongoDB将数据获取到java对象中

javascript - 在 reactJs 中添加动态状态

javascript - 检查列表元素中的重复名称

javascript - React.js 包含 css

php - 将数据从 PHP 传递到 JavaScript