我目前正在使用 javascript 做一个用户注册界面。但是我没有成功建立一个cookie会话。
在 localhost 网络上唱歌后,它会提示此消息--> site can't bereach。localhost 拒绝连接。
我已经重新安装了 cookie-session 包,但它仍然无法正常工作
有没有办法让它工作?
这是来自终端的错误消息:(node:7978) UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'id' of undefined at /Users/gabrielswee/Desktop/Desktop Folders/Courses/Javascript/ecomm/index.js:58:29 (节点:7978)UnhandledPromiseRejectionWarning:未处理的承诺拒绝。此错误源于在没有 catch 块的情况下抛出异步函数内部,或拒绝未使用 .catch() 处理的承诺。要在未处理的 Promise 拒绝时终止节点进程,请使用 CLI 标志--unhandled-rejections=strict
(请参阅https://nodejs.org/api/cli.html#cli_unhandled_rejections_mode)。(拒绝 id:1)(节点:7978)[DEP0018] DeprecationWarning:不推荐使用未处理的承诺拒绝。将来,未处理的 Promise 拒绝将使用非零退出代码终止 Node.js 进程。
这是我的语法
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");
});
用户.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");