Node.js は、Chrome ブラウザに基づく JavaScript 実行環境です。サーバー側で JavaScript コードを実行でき、効率的な I/O 操作、ノンブロッキング IO、およびイベントを提供します。 Node.js はドライバーなどの優れた機能を備えているため、オンラインの質疑応答コミュニティ機能を実装する Web プロジェクトなど、Web アプリケーション開発で広く使用されています。
この記事では、Node.js を使用して、ユーザー登録、ログイン、質問、回答などの機能を含むオンライン Q&A コミュニティを構築する方法を学び、具体的なコード例も示します。
オンライン Q&A コミュニティの構築を開始する前に、Node.js 環境をセットアップする必要があります。ここでは、Node.js 用のシンプルで柔軟かつ効率的な Web フレームワークである Express フレームワークを使用することを選択します。
Node.js をインストールした後、npm を使用して Express をインストールできます。具体的なコードは次のとおりです:
npm install express --save
ユーザー登録機能 オンラインQ&Aコミュニティにおける基本的なコンテンツです。ユーザーのユーザー名、パスワード、およびその他の関連情報をデータベースに保存する必要があり、またユーザーが入力した情報に対して特定の検証を実行する必要もあります。
ここでは、MongoDB を使用してユーザー情報を保存し、bcrypt 暗号化ライブラリを使用してユーザー パスワードを暗号化することを選択します。具体的なコードは次のとおりです:
// 引入相关库 const bcrypt = require('bcrypt') const { User } = require('../models') // 用户注册 const register = async (req, res, next) => { try { const { username, password } = req.body if (!username || !password) { return res.status(400).send('用户名或密码不能为空') } const user = await User.findOne({ username }) if (user) { return res.status(400).send('该用户名已被占用,请更换其他用户名') } const salt = await bcrypt.genSalt(10) const hash = await bcrypt.hash(password, salt) const newUser = await User.create({ username, password: hash, }) return res.status(201).send(newUser) } catch (err) { next(err) } } module.exports = { register, }
ユーザー ログイン機能は、オンライン Q&A コミュニティのもう 1 つの基本機能です。ユーザーがログインする際には、ユーザーの入力情報を検証する必要があり、ユーザーが入力した情報がデータベースに保存されている情報と一致する場合はログインに成功し、一致しない場合はログインに失敗します。
ここでは、Passport.js ライブラリを使用してユーザー ログイン検証を実装することを選択します。具体的なコードは次のとおりです:
// 引入相关库 const passport = require('passport') // 用户登录 const login = async (req, res, next) => { passport.authenticate('local', (err, user, info) => { if (err) { return next(err) } if (!user) { return res.status(401).send(info.message) } req.logIn(user, (err) => { if (err) { return next(err) } return res.status(200).send(user) }) })(req, res, next) } module.exports = { login, }
質問機能はオンラインQ&Aコミュニティの中核機能の一つです。ユーザーはコミュニティで自分自身の質問をすることができ、他のユーザーが解決策を提供することを期待できます。
ここでは、MongoDB を使用してユーザーからの質問を保存する必要があり、ユーザーのリクエストを処理するルートをカプセル化する必要もあります。具体的なコードは次のとおりです:
// 引入相关库 const { Question } = require('../models') // 提问 const ask = async (req, res, next) => { try { const { question, description } = req.body if (!question) { return res.status(400).send('问题不能为空') } const newQuestion = await Question.create({ question, description, userId: req.user.id, }) return res.status(201).send(newQuestion) } catch (err) { next(err) } } module.exports = { ask, }
回答機能は、オンライン Q&A コミュニティのもう 1 つの中心的な機能です。コミュニティで他のユーザーが質問すると、他のユーザーは、質問したユーザーの役に立つことを期待して、自分の経験や知識に基づいて質問に答えることができます。
ここでは、MongoDB を使用してユーザーが提示した回答を保存する必要があり、同時にユーザーのリクエストを処理するルートをカプセル化する必要があります。具体的なコードは次のとおりです:
// 引入相关库 const { Answer, Question } = require('../models') // 回答问题 const answer = async (req, res, next) => { try { const { content } = req.body const { questionId } = req.params if (!content) { return res.status(400).send('回答不能为空') } const question = await Question.findOne({ _id: questionId, }) if (!question) { return res.status(404).send('未找到该问题') } const newAnswer = await Answer.create({ content, userId: req.user.id, questionId: question._id, }) return res.status(201).send(newAnswer) } catch (err) { next(err) } } module.exports = { answer, }
以上がNode.js を使用してオンライン Q&A コミュニティ機能を実装する Web プロジェクトの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。