用nodejs写一个包含登陆与注册的网站
时间: 2023-12-09 11:03:19 浏览: 28
好的,下面是一个简单的用 Node.js 和 Express 框架搭建的包含登录和注册的网站。请注意,这只是一个示例,实际生产环境中需要更加严格的安全措施和用户验证。
1. 首先,创建一个新的文件夹作为项目文件夹,然后在终端中进入该文件夹并运行以下命令以初始化 npm 项目:
```
npm init
```
2. 安装所需的依赖项,包括 express、body-parser、bcrypt 和 express-session:
```
npm install express body-parser bcrypt express-session --save
```
3. 创建一个名为 app.js 的文件,并将以下代码添加到文件中:
```javascript
const express = require('express');
const bodyParser = require('body-parser');
const bcrypt = require('bcrypt');
const session = require('express-session');
const app = express();
app.use(bodyParser.urlencoded({ extended: true }));
app.use(session({
secret: 'secret-key',
resave: false,
saveUninitialized: false
}));
app.set('view engine', 'ejs');
let users = [];
app.get('/', (req, res) => {
res.render('index');
});
app.get('/register', (req, res) => {
res.render('register');
});
app.post('/register', async (req, res) => {
const user = {
username: req.body.username,
password: await bcrypt.hash(req.body.password, 10)
};
users.push(user);
res.redirect('/');
});
app.get('/login', (req, res) => {
res.render('login');
});
app.post('/login', async (req, res) => {
const user = users.find(user => user.username === req.body.username);
if (user && await bcrypt.compare(req.body.password, user.password)) {
req.session.user = user;
res.redirect('/dashboard');
} else {
res.redirect('/login');
}
});
app.get('/dashboard', (req, res) => {
if (req.session.user) {
res.render('dashboard', { user: req.session.user });
} else {
res.redirect('/login');
}
});
app.listen(3000, () => {
console.log('Server started on port 3000');
});
```
4. 创建一个 views 文件夹,并在其中创建以下模板文件:
index.ejs:
```html
<!DOCTYPE html>
<html>
<head>
<title>Home</title>
</head>
<body>
<h1>Welcome to my website</h1>
<nav>
<a href="/register">Register</a>
<a href="/login">Login</a>
</nav>
</body>
</html>
```
register.ejs:
```html
<!DOCTYPE html>
<html>
<head>
<title>Register</title>
</head>
<body>
<h1>Register</h1>
<form method="post" action="/register">
<label for="username">Username:</label>
<input type="text" id="username" name="username">
<br>
<label for="password">Password:</label>
<input type="password" id="password" name="password">
<br>
<button type="submit">Register</button>
</form>
</body>
</html>
```
login.ejs:
```html
<!DOCTYPE html>
<html>
<head>
<title>Login</title>
</head>
<body>
<h1>Login</h1>
<form method="post" action="/login">
<label for="username">Username:</label>
<input type="text" id="username" name="username">
<br>
<label for="password">Password:</label>
<input type="password" id="password" name="password">
<br>
<button type="submit">Login</button>
</form>
</body>
</html>
```
dashboard.ejs:
```html
<!DOCTYPE html>
<html>
<head>
<title>Dashboard</title>
</head>
<body>
<h1>Welcome <%= user.username %></h1>
<nav>
<a href="/">Home</a>
</nav>
</body>
</html>
```
5. 最后,在终端中运行以下命令以启动服务器:
```
node app.js
```
现在,您可以在浏览器中访问 http://localhost:3000 来查看您的网站,并在注册和登录页面中创建新用户。