nodejs+mongoDB+mongoose商品发布Demo

前言:使用nodejs实现登录、注册、商品发布、商品列表展示Demo,通过这个demo熟悉nodejs使用,mongoDB的一些简单操作。

一、环境准备

1.nodejs安装

到官网下载安装包,或者在nvm上下载,我本地的node版本为v6.9.2

2.mongoDB安装

a.第一种方法是直接下载压缩包解压

   第二种方法使用在终端brew install mongodb

b.启动mongoDB:

进入到安装mongo的目录下的mongo/bin路径下

sudo mongod

mongo启动成功

看到这个界面即mongo启动成功。

c.可以下载mongoDB图形管理工具,查看和管理数据库,我用的是Robomongo。

二、开始写代码啦

环境准备好后,可以开始写nodejs逻辑以及页面了,你需要有的基础是:

1.html+css+javascript前端基础

2.npm简单操作

3.学习node API以及express,推荐阮一峰nodejs教程,里边讲得简单明了,阮老师的教程一直都很赞

4.项目目录结构

├── productNode       项目根目录

│   ├── database       启动监听数据库操作目录

│   ├── public            静态资源文件放置目录

│   ├── node_modules     npm安装包存放目录

│  ├── routes            路由及接口目录

│   ├── app.js              项目初始化及启动服务文件

│  ├── package.json    package.json文件

5. app.js 项目初始化及启动服务文件

var express=require('express');

var app=express();

var hbs=require('hbs');

var bodyParser=require('body-parser');

var cookieParser=require('cookie-parser');

var multipart=require('connect-multiparty');//上传图片中间件

var router=require('./routes/route');

require('./database/db');

app.set('view engine','html');

app.engine('.html',hbs.__express);//指定模板为html

/*中间件*/

app.use(bodyParser({uploadDir:'./public/upload'}));//body消息体解析

app.use(cookieParser());

app.use(multipart());

app.use(express.static('./public'))//静态资源

app.use(router);//路由

app.listen(8080);

a.我这里用到的是express框架,使用了hbs模板引擎,指定模板文件为html格式的,是我们比较熟悉的格式,使用jade也可以。

app.set('view engine','html');

app.engine('.html',hbs.__express);

这两句设置使用的模板引擎。

b.

var bodyParser=require('body-parser');

app.use(bodyParser({uploadDir:'./public/upload'}));//body消息体解析

使用中间件的方式,引用你需要的模块,可在npm中安装即可,例如npm install body-parser。引用这个就能在接口请求中获取客户端发送过来的body消息体,还指定了文件上传路径为./public/upload。cookie-parser设置管理cookie的中间件,multipart文件上传的中间件,设置这个可以获取到客户端上传过来的file信息。

c.app.listen(8000)启动服务,为8000端口

6.连接数据库 /database/db.js

var mongoose=require('mongoose');

var url='mongodb://localhost:27017/product';

var db=mongoose.connect(url);

db.connection.on('open',function() {

console.log('数据库连接成功');

});

db.connection.on('error',function() {

console.log('数据库连接失败');

})

安装mongoose是nodejs中操作mongoDB数据库的框架,mongoose.connect('mongodb://localhost:27017/product')连接数据库,默认的端口号为27017,数据库名称为product,并监听open事件,和error事件,连接成功或连接失败都会进到相应的时间回调中。

/database/produc.js指定集合product的数据结构,创建模型

var mongoose=require('mongoose');

var Schema=mongoose.Schema;

var productSchema=newSchema({

      name:String,  //商品名称

      description:String, //商品描述

       price:Number, //商品价格

       user:String,   //发布人

      createTime:Number,  //商品创建时间

      image:String  //商品图片路径

});

var product=mongoose.model('product',productSchema);

module.exports=product;

7. public静态资源文件夹

public用于存放静态资源文件,我们在app.js初始化文件中已经指定了静态资源存放的文件夹为public,里边的资源在服务启动后即可通过相应的路径访问到

--images

--upload

--styles

--js

以上文件夹分别用于存放图片资源,上传的图片存放位置,css样式,页面逻辑的js文件。

8.views中用于存放html页面文件

9.routes/route.js  路由及接口

var express=require('express');

var router=express.Router();

express框架中的Router方法。

路由

router.get('/',function(req,res) {

    res.render('index',{

         title:'首页'

   })

});

请求匹配到/,进入到改回调中,response.render渲染index模板,我们在初始化中已经指定了模板为html格式的文件,这里就可以不用写html后缀了。用这样的方法匹配路径,渲染模板。

接口

//登录

var user=require('../database/user');   //user集合的数据格式模型

router.post('/api/login',function(req,res) {

var name=req.body.name;

var password=req.body.password;

var query={

   name:name,

    password:password

}

var hash=hashPW(name,password);

user.find(query,function(err,docs) {

if(err) {

        console.log('find user error');

}else{

     if(docs.length==0) {

         res.send({

             status:500,

            message:'用户名或密码错误'

        });

      }else{

            res.cookie("account", {account:name,hash:hash}, {maxAge:86400000});

            res.send({

               status:200,

               message:'login success'

         });

}

}

});

});

匹配到客户单发送post请求/api/login后进行相应的处理,根据用户的输入账号密码查询数据库,如果没有查询到结果,res.send发送数据给客户端,没有查询到,账号或密码错误,如果数据库中查询到该用户了,返回状态码200,登录成功。登录成功并进行cookie设置,用于保持登录状态。

三、上代码

demo里还有上传图片的代码,大家也可以参考下。喜欢的麻烦给个star哦!^_^

nodejs商品发布Demo的git地址

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,716评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,558评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,431评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,127评论 0 209
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,511评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,692评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,915评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,664评论 0 202
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,412评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,616评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,105评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,424评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,098评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,096评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,869评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,748评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,641评论 2 271

推荐阅读更多精彩内容