Giter Club home page Giter Club logo

node-shopping-cart's Introduction

NodeJS shopping cart

use NodeJS Express MongoDB

安装NodeJS download website

使用express生成器 express generator

npm install express-generator -g

express shopping-cart --hbs // --hbs为handlebars模板

npm install 

npm start // 启动服务

Handlebars 是 JavaScript 一个语义模板库,通过对 view 和 data 的分离来快速构建 Web 模板,使用 express-handlebars 这个第三方包添加对 Handlebars 的支持。 npm install express-handlebars --save

express-handlebars配置

var expressHbs = require('express-handlebars');

var app = express();

// view engine setup
app.engine('.hbs', expressHbs({defaultLayout: 'layout', extname: '.hbs'}));
app.set('view engine', '.hbs')

//文档结构 views/layouts/layout.hbs

express-handlebars使用注意点

模板中 {{{ body }}} 用作占位符,显示主内容 默认配置:

  • layoutsDir="views/layouts/"
  • `partialsDir="views/partials/"

应用局部模板:

如: {{> foo/bar}} , 默认的是调用 views/partials/foo/bar.handlebars

mongoose

Mongoose是一个提供了MongoDB api 映射的Node.js库,即用于连接Node.JS与MongoDB的中间件 可以理解: Mongoose将数据库中的数据转换为JavaScript对象以供你在应用中使用,是使用Mongoose来创建并存储数据。

var mongoose = require('mongoose');
mongoose.connect('localhost:27017/shopping');

mongoose.Schema方法用来定义数据集的格式(schema),mongoose.model方法将格式分配给指定的数据集。

models

对应mongoose orm /models 目录 mongoose.model('Product', schema); model方法中的Product对应的数据集名为products

seed

数据集生成 /seed

在数据集生成中,最后的mongoose.disconnect()操作,注意位置! 数据库保存操作是异步的,如果要结束数据库连接,请确保在保存结束后,再执行结束连接操作

node seed时错误:DeprecationWarning: Mongoose: mpromise

csurf

Node.js CSRF protection middleware

csurf

注意: Requires either a session middleware or cookie-parser to be initialized first.

安装好后,在路由文件中引用

session

npm install express-session --save

passport

用户认证,npm install passport --save

使用passport前需要配置

具体步骤含义参考

遇到的大坑,在看passport.js的文时,没有理解passport.serializeUserpassport.deserializeUser含义,特别是案例中的参数user,

一直遇到报错,ReferenceError: user is not defined,纠其原因,主要是没理解这两个方法的含义

serializeUser 是用户登录验证成功后,把相应的数据存到session中,其参数就是 new LocalStrategy()中回调的值

deserializeUser 是根据 serializeUser存储在session中的值,读取用户的全部数据对象,并封装到req.user里

bcrypt-nodejs

hash password, npm install bcrypt-nodejs --save

connect-flash

The flash is a special area of the session used for storing messages.消息闪存,相当于laravel中with

npm install connect-flash --save

passport-local

使用用户名和密码的验证策略

passport-local doc

注意: 默认的username 和 password改成自定义的方式

npm install passport-local --save

express-validator

express-validator

session存储在服务器的某处,非常容易leak,不适合在生产环境中,如,用户登录了某网站,这时候服务器突然挂了,然后另外一个机器跑起来,数据库是一个mongodb分布式,此时从库里读取用户的session,即session持久化

使用connect-mongo中间件 npm install connect-mongo --save 存储session持久化的中间件 本项目使用connect-mongo 添加一个session存储

FAQ

遇到一个报错

thread1] Failed to connect to 127.0.0.1:27017, in(checking socket for error after poll), reason: Connection refused

由于我指定了储存数据的文件夹,重新指定即可

./mongod --dbpath /User/Steven/myData

部署服务器

  • 选择一个目录,下载nodejs,用当前最新版本v7.7.4,执行 wget https://nodejs.org/dist/v7.7.4/node-v7.7.4.tar.gz
  • 解压 tar -xf node-v7.7.4.tar.gz
  • 进入目录
cd node-v7.7.4
./configure
make (注意: make时间会久些)
sudo make install
  • 检测是否安装成功,可通过 node -v 和 npm -v检查
  • 更新Node版本, npm install -g nn stable

在部署服务器的时候,遇到 virtual memory exhausted: Cannot allocate memory 报错,无法分配内存,这时候就可以用到swap分区 具体swap含义,请看 Linux交换空间(swap space

解决方法: How To Create A Swap File In Linux

/root/mongodb/bin/mongod --dbpath=/var/mongodb/data --logpath /var/mongodb/logs/log.log -fork

/root/mongodb/bin/mongod --dbpath=/var/mongodb/data --logpath /var/mongodb/logs/log.log -fork

node-shopping-cart's People

Contributors

shutdowndapp avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.