用Nodejs做的小站粗糙的完工
用Nodejs做的小站粗糙的完工
用node做的小站粗糙的完工(注册,登录,发布,评论,分页,上传图片)。。。。 在node.js上用时2.5天,开发速度不如PHP,另外,使用mysql是个很不好的选择,打算换成mongo
当然可以。以下是一个基于Node.js、Express框架、MySQL数据库和MongoDB数据库的小站示例。我们将展示如何实现用户注册、登录、发布文章、添加评论以及图片上传功能。此外,还将展示如何从MySQL迁移到MongoDB。
1. 使用Node.js和Express搭建基本站点
首先,我们需要安装必要的依赖包:
npm init -y
npm install express mysql2 multer
Express服务器设置
const express = require('express');
const app = express();
const port = 3000;
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
// 路由设置
app.get('/', (req, res) => {
res.send('Hello World!');
});
app.listen(port, () => {
console.log(`Server is running on http://localhost:${port}`);
});
2. 用户注册与登录
假设我们使用MySQL数据库进行用户管理:
const mysql = require('mysql2');
const pool = mysql.createPool({
host: 'localhost',
user: 'root',
database: 'testdb'
});
app.post('/register', (req, res) => {
const { username, password } = req.body;
pool.query(
'INSERT INTO users (username, password) VALUES (?, ?)',
[username, password],
(err, result) => {
if (err) throw err;
res.send('User registered successfully');
}
);
});
app.post('/login', (req, res) => {
const { username, password } = req.body;
pool.query(
'SELECT * FROM users WHERE username = ? AND password = ?',
[username, password],
(err, results) => {
if (results.length > 0) {
res.send('Login successful');
} else {
res.send('Invalid credentials');
}
}
);
});
3. 迁移到MongoDB
接下来,我们将用户管理迁移到MongoDB:
const MongoClient = require('mongodb').MongoClient;
const url = 'mongodb://localhost:27017';
const dbName = 'testdb';
MongoClient.connect(url, function(err, client) {
if (err) throw err;
const db = client.db(dbName);
const collection = db.collection('users');
app.post('/register', (req, res) => {
const { username, password } = req.body;
collection.insertOne({ username, password }, (err, result) => {
if (err) throw err;
res.send('User registered successfully');
});
});
app.post('/login', (req, res) => {
const { username, password } = req.body;
collection.findOne({ username, password }, (err, result) => {
if (result) {
res.send('Login successful');
} else {
res.send('Invalid credentials');
}
});
});
});
4. 图片上传
使用multer
库来处理文件上传:
npm install multer
const multer = require('multer');
const path = require('path');
const storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, 'uploads/')
},
filename: function (req, file, cb) {
cb(null, Date.now() + path.extname(file.originalname))
}
});
const upload = multer({ storage: storage });
app.post('/upload', upload.single('image'), (req, res) => {
res.send('File uploaded successfully');
});
以上就是用Node.js构建一个简单的网站,并且展示了如何从MySQL迁移到MongoDB的过程。希望这些示例对你有所帮助!
和我做的功能都差不多。。。支持一下,发地址吧。。
还能上传图片啦,地址~
求地址
如果提前说开发速度没有php快就有点为时尚早,毕竟不是拿具有同等资质的2类做比较,不过我一直看好node
希望lz开源出来
对于“用Nodejs做的小站粗糙的完工”这个帖子,可以总结出你已经完成了一个包含注册、登录、发布内容、评论和分页功能的小型网站。以下是一些基本示例代码和建议,帮助你理解这些功能是如何实现的。
注册与登录
这里你可以使用Express框架来搭建服务器,并配合express-session
库来处理会话管理,以及bcryptjs
库对密码进行加密。
const express = require('express');
const bcrypt = require('bcryptjs');
const session = require('express-session');
const app = express();
app.use(session({
secret: 'secret-key',
resave: false,
saveUninitialized: false
}));
app.post('/register', (req, res) => {
// 假设你已经有了一个数据库连接
const { username, password } = req.body;
bcrypt.hash(password, 10, (err, hash) => {
if (err) throw err;
// 将用户信息存储到数据库中
// ...
req.session.user = username;
res.redirect('/');
});
});
app.post('/login', (req, res) => {
const { username, password } = req.body;
// 假设你已经有了一个数据库查询语句
// 查询用户是否存在
// ...
if (/* 用户存在 */) {
bcrypt.compare(password, result.password, (err, match) => {
if (err) throw err;
if (match) {
req.session.user = username;
res.redirect('/');
} else {
res.send('密码错误');
}
});
} else {
res.send('用户不存在');
}
});
发布内容与评论
你可以使用MongoDB替代MySQL,因为MongoDB更适合Node.js环境,并且操作更简便。使用Mongoose作为ORM工具可以简化数据模型的定义和操作。
const mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/my_database', { useNewUrlParser: true });
const postSchema = new mongoose.Schema({
title: String,
content: String,
author: String,
createdAt: Date
});
const Post = mongoose.model('Post', postSchema);
app.post('/post', (req, res) => {
const { title, content, author } = req.body;
const post = new Post({ title, content, author, createdAt: new Date() });
post.save((err) => {
if (err) throw err;
res.redirect('/');
});
});
分页
分页可以通过在数据库查询时添加skip()
和limit()
方法实现。
app.get('/', async (req, res) => {
const page = parseInt(req.query.page) || 1;
const limit = 10; // 每页显示的文章数量
const skip = (page - 1) * limit;
try {
const posts = await Post.find().skip(skip).limit(limit);
res.render('index', { posts });
} catch (err) {
console.error(err);
res.status(500).send('Server Error');
}
});
图片上传
可以使用Multer库来处理文件上传。
const multer = require('multer');
const path = require('path');
const storage = multer.diskStorage({
destination: function (req, file, cb) {
cb(null, 'uploads/')
},
filename: function (req, file, cb) {
cb(null, Date.now() + path.extname(file.originalname))
}
});
const upload = multer({ storage: storage });
app.post('/upload', upload.single('image'), (req, res) => {
res.send('Image uploaded successfully');
});
希望这些示例能帮助你更好地理解和改进你的项目!