本文共 3671 字,大约阅读时间需要 12 分钟。
首先,我们需要初始化一个Node.js Express项目。通过以下命令可以快速创建项目框架:
express -e test
安装完成后,进入项目目录并执行:
npm install
运行项目:
npm start
初始化项目后,项目结构如下:
app.js:主应用文件package.json:项目依赖管理文件bin:启动文件public:静态资源目录routes:路由配置目录views:视图文件目录项目依赖项如下:
{ "dependencies": { "body-parser": "~1.12.0", "cookie-parser": "~1.3.4", "debug": "~2.1.1", "ejs": "~2.3.1", "express": "~4.12.2", "mongoose": "~5.1.0", "morgan": "~1.5.1", "serve-favicon": "~2.2.0" }} 使用Mongoose操作MongoDB数据库。首先创建database文件夹下的dbHandel.js和models.js:
// models.jsmodule.exports = { user: { name: { type: String, required: true }, password: { type: String, required: true } }}; // dbHandel.jsvar mongoose = require('mongoose');mongoose.connect('mongodb://localhost:27017/nodedb');module.exports = { getModel: function(type) { return mongoose.model(type); }}; 在app.js中添加数据库连接:
var mongoose = require('mongoose');mongoose.connect('mongodb://localhost:27017/nodedb');global.db = mongoose; 在routes/index.js中添加路由:
var express = require('express');var router = express.Router();var User = global.dbHandel.getModel('user');router.get('/', function(req, res) { res.render('index', { title: '欢迎' });});router.get('/login', function(req, res) { res.render('login', { title: '用户登录' });});router.get('/register', function(req, res) { res.render('register', { title: '用户注册' });});router.get('/home', function(req, res) { if (!req.session.user) { req.session.error = '请先登录'; res.redirect('/login'); } res.render('home', { title: '主页' });});router.get('/logout', function(req, res) { req.session.user = null; req.session.error = null; res.redirect('/');});module.exports = router; 在routes/index.js中添加登录逻辑:
router.post('/login', function(req, res) { var uname = req.body.uname; var upwd = req.body.upwd; User.findOne({ name: uname }, function(err, user) { if (err) { res.send(500); } else if (!user) { req.session.error = '用户名不存在'; res.send(404); } else if (upwd !== user.password) { req.session.error = '密码错误'; res.send(404); } else { req.session.user = user; res.send(200); } });}); 在routes/index.js中添加注册逻辑:
router.post('/register', function(req, res) { var uname = req.body.uname; var upwd = req.body.upwd; User.findOne({ name: uname }, function(err, user) { if (err) { req.session.error = '网络错误'; res.send(500); } else if (user) { req.session.error = '用户名已存在'; res.send(500); } else { User.create({ name: uname, password: upwd }, function(err, user) { if (err) { req.session.error = '注册失败'; res.send(500); } else { req.session.error = '注册成功'; res.send(200); } }); } });}); 在app.js中配置EJS模板引擎:
var express = require('express');var path = require('path');var favicon = require('serve-favicon');var logger = require('morgan');var cookieParser = require('cookie-parser');var bodyParser = require('body-parser');var session = require('express-session');var db = mongoose.connect('mongodb://localhost:27017/nodedb');app.use(session({ secret: 'your secret key', resave: false, saveUninitialized: true, cookie: { secure: true, maxAge: 1000 * 60 * 60 }})); 启动MongoDB数据库服务:
mongod --dbpath=/data/db
启动Node.js项目:
npm start
访问项目:
http://localhost:3000/loginhttp://localhost:3000/registerhttp://localhost:3000/home确保MongoDB服务已运行。
如果出现MongoDB连接错误,检查数据库地址和端口是否正确。
如果安装依赖失败,尝试使用:
npm install bson
或者更新依赖:
npm update
通过以上步骤,一个简单的注册登录功能已经完成。项目代码已发布至GitHub:
https://github.com/imwtr/nodejs_express_login_register
转载地址:http://rpjfk.baihongyu.com/