4 回复
当然可以!以下是一个基于Node.js的简单SNS(社交网络服务)框架的示例。这个框架将包括用户注册、登录、发布动态以及关注其他用户的功能。
技术栈
- Node.js:后端运行环境
- Express.js:Web应用框架
- MongoDB:数据库存储
- JWT (JSON Web Tokens):身份验证
安装依赖
首先,创建一个新的项目目录并初始化 npm
:
mkdir sns-framework
cd sns-framework
npm init -y
安装所需的依赖:
npm install express mongoose bcryptjs jsonwebtoken body-parser
项目结构
sns-framework/
├── config/
│ └── db.js
├── controllers/
│ ├── authController.js
│ └── postController.js
├── models/
│ ├── User.js
│ └── Post.js
├── routes/
│ ├── authRoutes.js
│ └── postRoutes.js
├── app.js
└── server.js
配置文件 (config/db.js
)
const mongoose = require('mongoose');
mongoose.connect('mongodb://localhost:27017/sns', {
useNewUrlParser: true,
useUnifiedTopology: true
}).then(() => console.log('Connected to MongoDB'))
.catch(err => console.error('Could not connect to MongoDB', err));
用户模型 (models/User.js
)
const mongoose = require('mongoose');
const bcrypt = require('bcryptjs');
const UserSchema = new mongoose.Schema({
username: { type: String, required: true, unique: true },
password: { type: String, required: true }
});
UserSchema.pre('save', async function(next) {
if (!this.isModified('password')) return next();
this.password = await bcrypt.hash(this.password, 8);
});
module.exports = mongoose.model('User', UserSchema);
发布模型 (models/Post.js
)
const mongoose = require('mongoose');
const PostSchema = new mongoose.Schema({
userId: { type: mongoose.Schema.Types.ObjectId, ref: 'User' },
content: { type: String, required: true }
});
module.exports = mongoose.model('Post', PostSchema);
控制器 (controllers/authController.js
)
const jwt = require('jsonwebtoken');
const User = require('../models/User');
exports.register = async (req, res) => {
const { username, password } = req.body;
const user = new User({ username, password });
await user.save();
res.status(201).send({ message: 'User registered' });
};
exports.login = async (req, res) => {
const { username, password } = req.body;
const user = await User.findOne({ username });
if (!user || !await bcrypt.compare(password, user.password)) {
return res.status(400).send({ message: 'Invalid credentials' });
}
const token = jwt.sign({ userId: user._id }, 'secret_key', { expiresIn: '1h' });
res.send({ token });
};
路由 (routes/authRoutes.js
)
const express = require('express');
const { register, login } = require('../controllers/authController');
const router = express.Router();
router.post('/register', register);
router.post('/login', login);
module.exports = router;
应用入口 (app.js
)
const express = require('express');
const bodyParser = require('body-parser');
const authRoutes = require('./routes/authRoutes');
const app = express();
app.use(bodyParser.json());
app.use('/api/auth', authRoutes);
module.exports = app;
启动服务器 (server.js
)
const app = require('./app');
const db = require('./config/db');
app.listen(3000, () => {
console.log('Server is running on port 3000');
});
总结
以上代码提供了一个简单的SNS框架的基础,包括用户注册、登录以及发布动态的功能。你可以在此基础上添加更多功能,如关注用户、查看动态等。希望这个示例对你有所帮助!
github维基上去查https://github.com/joyent/node/wiki/modules
NodeBB
当然可以!以下是如何使用Node.js构建一个简单的SNS(社交网络服务)框架。这里我们将使用Express作为后端框架,并使用MongoDB作为数据库来存储用户信息和帖子数据。
示例代码
-
安装依赖 首先确保已经安装了Node.js和npm。然后创建一个新的项目文件夹并初始化npm:
mkdir sns-app cd sns-app npm init -y
-
安装必要的依赖 安装Express、Mongoose等:
npm install express mongoose body-parser cors dotenv
-
项目结构 创建以下文件和目录:
sns-app/ ├── models/ │ └── Post.js │ └── User.js ├── routes/ │ └── posts.js │ └── users.js ├── .env ├── app.js └── server.js
-
配置环境变量 在
.env
文件中添加数据库连接字符串:MONGO_URI=mongodb://localhost:27017/sns PORT=5000
-
数据库模型 在
models/User.js
中定义用户模型:const mongoose = require('mongoose'); const userSchema = new mongoose.Schema({ username: { type: String, required: true, unique: true }, email: { type: String, required: true, unique: true }, password: { type: String, required: true } }); module.exports = mongoose.model('User', userSchema);
-
路由 在
routes/users.js
中定义用户相关的API:const express = require('express'); const router = express.Router(); const User = require('../models/User'); // 注册新用户 router.post('/register', async (req, res) => { try { const newUser = new User(req.body); await newUser.save(); res.status(201).json(newUser); } catch (err) { res.status(500).json({ message: err.message }); } }); module.exports = router;
-
主应用 在
app.js
中引入路由:const express = require('express'); const bodyParser = require('body-parser'); const cors = require('cors'); const mongoose = require('mongoose'); const userRoutes = require('./routes/users'); const app = express(); app.use(cors()); app.use(bodyParser.json()); app.use('/api/users', userRoutes); module.exports = app;
-
启动服务器 在
server.js
中启动服务器:require('dotenv').config(); const mongoose = require('mongoose'); const app = require('./app'); mongoose.connect(process.env.MONGO_URI, { useNewUrlParser: true, useUnifiedTopology: true }).then(() => { console.log('Connected to MongoDB'); app.listen(process.env.PORT, () => { console.log(`Server is running on port ${process.env.PORT}`); }); }).catch(err => { console.error('Failed to connect to MongoDB', err); });
以上就是一个简单的基于Node.js的SNS框架。你可以在此基础上继续扩展功能,例如添加帖子管理、评论、好友系统等。希望这对你有所帮助!