求一个基于Nodejs的sns框架。

发布于 1周前 作者 phonegap100 来自 nodejs/Nestjs

求一个基于Nodejs的sns框架。

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

当然可以!以下是如何使用Node.js构建一个简单的SNS(社交网络服务)框架。这里我们将使用Express作为后端框架,并使用MongoDB作为数据库来存储用户信息和帖子数据。

示例代码

  1. 安装依赖 首先确保已经安装了Node.js和npm。然后创建一个新的项目文件夹并初始化npm:

    mkdir sns-app
    cd sns-app
    npm init -y
  2. 安装必要的依赖 安装Express、Mongoose等:

    npm install express mongoose body-parser cors dotenv
  3. 项目结构 创建以下文件和目录:

    sns-app/
    ├── models/
       └── Post.js
       └── User.js
    ├── routes/
       └── posts.js
       └── users.js
    ├── .env
    ├── app.js
    └── server.js
  4. 配置环境变量.env文件中添加数据库连接字符串:

    MONGO_URI=mongodb://localhost:27017/sns
    PORT=5000
  5. 数据库模型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);
  6. 路由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;
  7. 主应用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;
  8. 启动服务器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框架。你可以在此基础上继续扩展功能,例如添加帖子管理、评论、好友系统等。希望这对你有所帮助!

回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!