搭建简单的node+express+mongodb项目
安装
首先要确保已经安装了 Node.js,接下来创建一个目录,然后进入此目录并将其作为当前工作目录。
mkdir myapp
cd myapp
通过 npm init 命令为应用创建一个 package.json 文件,指定入口文件为 index.js,然后一路回车确定即可。
npm init
接下来安装 Express 并将其保存到依赖列表中:
npm install express --save
创建 MongoDB 数据库
首先要确保安装了 MongoDB,并且把 mongoose 添加到 package.json 依赖里,
npm install mongoose --save
然后在CMD里执行下面命令
mongo //进入数据库
use express-demo //创建项目数据库
db.createCollection("users") //创建一个集合,也就是表
db.users.insert({userid: "admin", password: "123456"}) //给users里添加一个文档,也就是一条记录账号admin,密码123456
ok,现在检查一下:
db.users.find() //如果看到你刚刚添加的文档记录,就ok咯
搭建项目原型
进入myapp 目录,创建一个名为 index.js 的文件,此文件为入口文件,将下面代码复制进去;
var express = require('express');
var http = require('http')
var app = express();
var mongoose = require('mongoose');
var user = require('./models/user').user;
var bodyParser = require('body-parser');
mongoose.connect('mongodb://localhost/express-demo');
app.set('view engine', 'jade');
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: true}));
app.get('/', (req, res) => {
res.render('index', {title: 'index'})
})
app.get('/login', (req, res) => {
res.render('login', {title: 'login'})
})
app.get('/loginout', (req, res) => {
res.render('loginout', {title: 'loginout'})
})
app.post('/homepage', (req, res) => {
var query_doc = {
userid: req.body.userid,
password: req.body.password
};
(function () {
user.count(query_doc, (err, doc) => {
if (doc == 1) {
console.log(query_doc.userid + ": login success in " + new Date());
res.render('homepage', {title: 'homepage'});
} else {
console.log(query_doc.userid + ": login failed in " + new Date());
res.render('error', {title: 'login error'})
}
});
})(query_doc);
})
var server = http.createServer(app);
server.listen(3000, () => {
console.log('服务已启动')
})
上面这个index.js文件里,连接了 mongodb 并且创建了一个基本的服务器,设置了 jade 作为默认模板引擎;
然后,创建 models 文件夹,在models下创建一个user.js,作为实体类映射数据库的users集合;
var mongoose = require('mongoose')
var Schema = mongoose.Schema;
var userSchema = new Schema({
userid: String,
password: String
});
exports.user = mongoose.model('users', userSchema);
接下来,创建一个视图 views ,在 views 下面创建模板 index.jade、login.jade、loginout.jade、homepage.jade、error.jade,在模板里写出基本的页面,并引入 bootstrap 来美化页面;至此,基本大功告成了!
在cmd运行
node index.js
或
npm start
在浏览器打开 http://localhost:3000/ ,即可看到效果!
Github地址:https://github.com/jonechen1986/Node-Express-MongoDB
搭建简单的node+express+mongodb项目的更多相关文章
- Node+Express+MongoDB + Socket.io搭建实时聊天应用
Node+Express+MongoDB + Socket.io搭建实时聊天应用 前言 本来开始写博客的时候只是想写一下关于MongoDB的使用总结的,后来觉得还不如干脆写一个node项目实战教程实战 ...
- Node+Express+MongoDB + Socket.io搭建实时聊天应用实战教程(二)--node解析与环境搭建
前言 本来开始写博客的时候只是想写一下关于MongoDB的使用总结的,后来觉得还不如干脆写一个node项目实战教程实战.写教程一方面在自己写的过程中需要考虑更多的东西,另一方面希望能对node入门者有 ...
- Node.js Express+Mongodb 项目实战
Node.js Express+Mongodb 项目实战 这是一个简单的商品管理系统的小项目,包含的功能还算挺全的,项目涵盖了登录.注册,图片上传以及对商品进行增.删.查.改等操作,对于新手来说是个很 ...
- 8 步搭建 Node.js + MongoDB 项目的自动化持续集成
任何事情超过 90 秒就应该自动化,这是程序员的终极打开方式.Automating shapes smarter future. 这篇文章中,我们通过创建一个 Node.js + MongoDB 项目 ...
- Node+Express+MongoDB+Socket.io搭建实时聊天应用实战教程(一)--MongoDB入门
前言 本文并不是网上流传的多少天学会MongoDB那种全面的教程,而意在总结这几天使用MongoDB的心得,给出一个完整的Node+Express+MongoDB+Socket.io搭建实时聊天应用实 ...
- node+express+mongodb初体验
从去年11月份到现在,一直想去学习nodejs,在这段时间体验了gulp.grunt.yeomen,fis,但是对于nodejs深入的去学习,去开发项目总是断断续续. 今天花了一天的时间,去了解整理整 ...
- 使用node+express+mongodb实现用户注册、登录和验证功能
无论是手机端还是pc端,几乎都包含登录注册方面功能,今天就使用node+express+mongodb实现一套登录注册功能,这里需要自己去安装MongoDB环境,如果没有安装可以看这篇关于MongoD ...
- 基于react全家桶+antd-design+webpack2+node+express+mongodb开发的前后台博客系统
很久没更新博客,最近也有点忙,然后业余时间搞了一个比较完整基于react全家桶+antd-design+webpack2+node+express+mongodb开发的前后台博客系统的流程系统,希望对 ...
- Node+Express+MongoDB + Socket.io搭建实时聊天应用实战教程(三)--前后端环境配置
前言 之前都是介绍一些基础知识,在这一节,我们就要开始实战coding了.正所谓磨刀不误砍柴工,准备工作显得尤为重要.很多demo只是追求效果的实现,并不注重整个demo的架构性.从我个人的角度看来, ...
随机推荐
- is-A继承?Has-A?
教程把is-A和Has-A放在一起,我还以为java支持简单的方法能把Has对象的方法导出呢.. extents implements 要试一下. 不知道狗和汽车为什么总是被选出来举例. p ...
- Java微笔记(7)
String 类常用方法 注意点: 字符串 str 中字符的索引从0开始,范围为 0 到 str.length()-1 使用 indexOf 进行字符或字符串查找时,如果匹配返回位置索引:如果没有匹配 ...
- 面试- 阿里-. 大数据题目- 给定a、b两个文件,各存放50亿个url,每个url各占64字节,内存限制是4G,让你找出a、b文件共同的url?
假如每个url大小为10bytes,那么可以估计每个文件的大小为50G×64=320G,远远大于内存限制的4G,所以不可能将其完全加载到内存中处理,可以采用分治的思想来解决. Step1:遍历文件a, ...
- BZOJ4883 棋盘上的守卫(环套树+最小生成树)
容易想到网络流之类的东西,虽然范围看起来不太可做,不过这提供了一种想法,即将行列分别看做点.那么我们需要找一种连n+m条边的方案,使得可以从每条边中选一个点以覆盖所有点.显然每个点至少要连一条边.于是 ...
- ubuntu成功安装搜狗输入法
在安装之前,我们要先了解一个事实,那就是linux下安装软件和Windows是非常不同的,并不是简单地双击安装包就可以安装了.linux很多软件都有自己的一个依赖源,如果不先安装好这些依赖源,你是无法 ...
- Day21-获取用户请求相关信息及请求头
1. request里面还包含请求头等信息,可以打印看一下. views.py中的程序 from django.shortcuts import render,HttpResponse from dj ...
- TCP/IP协议详解---概述
工作之后,才发现以前在学校里学的东西忘得太快太干净了,现在需要一点点地捡起来了,要不然写几行程序会闹很多笑话会出现很多bug的.从今天开始,翻一翻<TCP/IP协议详解 卷1>这本 ...
- 【JQuery】事件
一.前言 接着上一章选择器的知识,继续啊jQuery的学习 二.内容 $(function(){}) 文档初始化加载 event.pageX 相对于文档左边缘的鼠标位置 event.pa ...
- 【MediaElement】WPF视频播放器【3】
一.前言 对于<MediaElement>前两章介绍了差不多了,其实好的界面还需要UI工程师的配合,比如帮忙设计下按钮的样式等等.同样视频本身也需要吸引人,不然做的再好的播放器也没用.之后 ...
- 【CF700E】Cool Slogans(后缀自动机)
[CF700E]Cool Slogans(后缀自动机) 题面 洛谷 CodeForces 题解 构建后缀自动机,求出后缀树 现在有个比较明显的\(dp\) 设\(f[i]\)表示从上而下到达当前点能够 ...