Невозможно создать сеанс cookie
В настоящее время я делаю пользовательский интерфейс регистрации с использованием javascript. Однако мне не удалось установить сеанс cookie.
После пения в локальной сети он запрашивает это сообщение - > сайт не может быть достигнут. localhost отказывается подключаться.
Я повторно установил пакет cookie-сессии, но он все еще не работает
Есть в любом случае, чтобы заставить его работать?
here is the error message from terminal: (node:7978) UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'id' of undefined at /Users/gabrielswee/Desktop/Desktop Folders/Courses/Javascript/ecomm/index.js:58:29 (node:7978) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). To terminate the node process on unhandled promise rejection, use the CLI flag --unhandled-rejections=strict (see https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode). (rejection id: 1) (node:7978) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
Вот мой синтаксис
index.js
const express = require("express"); const bodyParser = require("body-parser"); const cookieSession = require("cookie-session"); const usersRepo = require("./repository/users"); const app = express(); //NOTE: Middleware: To automatically body parse the data app.use(bodyParser.urlencoded({ extended: true })); //NOTE: Middleware: Cookie Session app.use( cookieSession({ name: "session", keys: ["lucky6226"] }) ); //NOTE: User Sign Up app.get("/", (req, res) => { res.send(` <div> Your id is:${req.session.userId} <form method ="POST"> <input name ="email" placeholder="email" /> <input name ="password" placeholder="password" /> <input name ="passwordConfirmation" placeholder="password confirmation" /> <button>Sign Up</button> </form> </div> `); }); //NOTE: Validating User Email and Password app.post("/", async (req, res) => { const { email, password, passwordConfirmation } = req.body; const existingUser = await usersRepo.getOneBy({ email }); if (existingUser) { return res.send("Email in use"); } if (password !== passwordConfirmation) { return res.send("Password must match"); } //NOTE: Create users in the user repository const user = await usersRepo.create({ email, password }); //NOTE: Store ID in the cookie. Use 3rd party package for Cookies --> npm install cookie-session req.session.userId = user.id; //Add by cookie session res.send("Account Created !!!"); }); //NOTE: HTTP Request app.listen(3000, () => { console.log("Connection established successfully"); });
user.js
const fs = require("fs"); const crypto = require("crypto"); class UsersRepository { constructor(filename) { if (!filename) { throw new Error("Creating a repository requires a filename"); } this.filename = filename; try { //NOTE: Check to see if the file exist fs.accessSync(this.filename); } catch (err) { //NOTE: if file do not exists, create the file fs.writeFileSync(this.filename, "[]"); } } async getAll() { return JSON.parse( await fs.promises.readFile(this.filename, { encoding: "utf8" }) ); } async create(attrs) { attrs.id = this.randomId(); const records = await this.getAll(); records.push(attrs); await this.writeAll(records); } async writeAll(records) { // NOTE: Write the updated 'records' array back to this.filename await fs.promises.writeFile( this.filename, JSON.stringify(records, null, 2) ); } randomId() { return crypto.randomBytes(4).toString("hex"); } async getOne(id) { const records = await this.getAll(); return records.find(record => record.id === id); } async delete(id) { const records = await this.getAll(); //NOTE: Return true if ID is not the same const filteredRecords = records.filter(record => record.id !== id); await this.writeAll(filteredRecords); } async update(id, attrs) { const records = await this.getAll(); const record = records.find(record => record.id === id); if (!record) { throw new Error(`Record with id ${id} is not found`); } //NOTE: Assign attrs {password} (attributes) into the record {email} Object.assign(record, attrs); //NOTE: Outcome --> record === {email: 'test@test.com', password: 'mypassword'} await this.writeAll(records); } async getOneBy(filters) { const records = await this.getAll(); //NOTE: outer for of loop --> looping through an array for (let record of records) { let found = true; //NOTE: inner for in loop --> search an object for (let key in filters) { if (record[key] !== filters[key]) { found = false; } } if (found === true) { return record; } } } //NOTE: File export module.exports = new UsersRepository("users.json")
Что я уже пробовал:
Я попробовал перепечатать и переустановить пакеты узлов, но это не сработало
Kornfeld Eliyahu Peter
Вы должны отлаживать свой код...
На основе информации "пользователь" (здесь: req.session.userId = user.id;) не определено...
Возможно, это как-то связано с вашей работой с async/await...