【问题标题】:how to access an object outside of the file in Node js and express?如何在Node js中访问文件外部的对象并表达?
【发布时间】:2022-10-12 23:18:02
【问题描述】:

我正在研究节点 js 和 express。我创建了两个名为 hash.js 和 login.js 的 js 文件。 Hash.js 文件获取用户名和密码,并根据密码生成令牌。但是 login.js 文件无法获取用户名。 我想知道一种方法,通过它我可以访问 login.js 文件中的用户对象。这是两个文件的屏幕截图。我虽然在 login.js 文件中声明了 users=[] 对象,但是每当我尝试登录时,它都会给我提示找不到用户的消息。

[哈希.js][1]

const jwt= require("jsonwebtoken");
const express= require("express");
const bcrypt= require("bcrypt");
const router= express.Router();
const app = express();

app.use(express.json());

var users = [];

router.post("/", async (req, res) => {
   try {
      const salt = await bcrypt.genSalt();
      const passwordHash = await bcrypt.hash(req.body.password, salt);
    users.push({username: req.body.username, password: passwordHash});
    res.json(users);
} catch (e) {
    res.status(500).send(e.toString());
}

});

【问题讨论】:

  • 似乎您没有从 hash.js 文件中导出任何内容,另外请将代码添加为 <codeblock/>。这对观看它的人将非常有用
  • 是的,我没有出口任何东西。但我想知道如何访问用户对象以便我可以轻松登录。

标签: node.js express


【解决方案1】:

您需要将登录名和哈希都放在同一路由中。下面是hash.js

const express = require("express");
const bcrypt = require("bcrypt");
const router = express.Router();

const users = [];

router.post("/register", async (req, res) => {
  try {
    const salt = await bcrypt.genSalt();
    const passwordHash = await bcrypt.hash(req.body.password, salt);
    console.log(passwordHash);
    users.push({ username: req.body.username, password: passwordHash });
    res.json(users);
  } catch (e) {
    res.status(500).send(e.toString());
  }
});

router.post("/login", async (req, res) => {
  try {
    const user = users.find((user) => user.username === req.body.username);
    console.log(user);
    if (!user) {
      res.status(400).send("User Not Found!");
    }
    if (await bcrypt.compare(req.body.password, user.password)) {
      res.send("LoggedIn");
    } else {
      res.send("Not Valid User!");
    }
  } catch (e) {
    console.log(e.toString());
  }
});

module.exports = router;

然后将 hash.js 导入你的 server.js。我在“视图”中创建了简单的 login.ejs 和 register.ejs 进行测试。有用。

const express = require("express");
const app = express();
const hash = require("./hash");

app.use(express.json());
app.set("view engine", "ejs");
app.use(express.urlencoded({ extended: false }));

app.get("/login", (req, res) => {
  res.render("login.ejs");
});

app.get("/", (req, res) => {
  res.render("register.ejs");
});

app.use("/", hash);

app.listen(3000);

注册.ejs

<h1>Register</h1>
<form action="/register" method="POST">
  <div>
    <label for="name">Name</label>
    <input type="text" id="name" name="username" required>
  </div>
  <div>
    <label for="password">Password</label>
    <input type="password" id="password" name="password" required>
  </div>
  <button type="submit">Register</button>
</form>

登录.ejs

<h1>Login</h1>
<form action="/login" method="POST">
  <div>
    <label for="username">Username</label>
    <input type="text" id="username" name="username" required>
  </div>
  <div>
    <label for="password">Password</label>
    <input type="password" id="password" name="password" required>
  </div>
  <button type="submit">Login</button>
</form>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-05
    • 1970-01-01
    • 2020-06-01
    • 2020-10-23
    • 2013-08-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多