nodejs+express+mongodb搭建网站

  前段时间参考Scott老师的教程以及相关资料,用nodejs+express+mongodb搭建了一个简单网站。功能比较简单,主要是实践nodejs还有学习使用bower、grunt等工具。
  当然必不可少的是要有一定的nodejs基础,个人比较喜欢阿里团队的《七天学会NodeJS》。结合慕课网的教程,我用nodejs的http模块写了简单的爬虫。这些都是准备工作,这里主要记录一下遇到的那些坑,有些安装过程没有截图,用文字叙述。
  1. 安装nodejs.
  安装详见上一篇博客。
  2.前期准备工作。
  构建起项目要清楚项目从哪里入口,怎样运行起来,视图有哪些,页面之间怎样跳转。项目最基本的构成如下图所示。
  项目结构
  其中app.js是入口文件, views 目录下是视图文件 , node_modules 下面是已安装和要安装 模块的存放位置。
  Express 是一个基于 Node.js 平台的极简、灵活的 web 应用开发框架。Jade是源于Node.js的html模板引擎。这里我也是第一次使用Express和Jade。

npm install express
npm install jade
npm install bower -g
bower install bootstrap

  依次执行下来安装了express、jade、bower、bootstrap。其中,bootstrap是通过bower安装的。bower用来管理前端资源。关于express和jade的具体使用请参考官方文档。
  注意 我是使用sublime text3作为开发环境,jade的语法高亮需要安装插件。使用package control搜索jade,下载第一个插件即可。不使用模板的话,我一般是用emmet插件,可以快速编写html、css。
  3.编写代码。
  各项准备工作做好之后,要实际编写代码让项目跑起来。
  
入口文件app.js

var express = require('express');
var bodyParser = require("body-parser");
var mongoose = require('mongoose');
var Movie = require('./models/movie')
var User = require('./models/user')
var port = process.env.PORT || 3000;
var app = express();

mongoose.connect('mongodb://localhost/movie')
//设置视图的根目录、模块引擎
app.set('views', './views/pages');
app.set('view engine', 'jade');
//将表单数据进行格式化
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
//请求页面过来的请求中有样式文件去public中查找
app.use(express.static('public'));
app.locals.moment = require('moment');
app.listen(port);

console.log('start!' +  port);
//index page
app.get('/', function(req, res) {
  Movie.fetch(function(err, movies) {
    if(err) {
      console.log(err);
    }
    res.render('index', {
      title: '首页',
      movies: movies
    })
  })
})
//signup
app.post('/user/signup', function(req,res) {

})

//detail page
app.get('/movie/:id', function(req, res) {

})

//adimin page
app.get('/admin/movie', function(req, res) {

})

  require进来所需要的模块,便可以使用相应的方法。通过app.get/app.post/app.delete和相应的路径分别执行get、post、delete方法。res.render通过拿到的html渲染页面。
  
layout.jade

doctype
html
  head   //页面的head,有要用到的一些head文件如bootstrap以及jquery等.每个页面都继承layout
    meta(charset="utf-8")
    title #{title}
    include ./includes/head
  body   //这是页面的body,需要到相应的jade文件中访问
    include ./includes/header
    block content

index.jade

/*首页*/
//-继承上层目录的layout
extends ../layout 
//-声明主要内容
block content 
  .container
    .row
      each item in movies
        .col-md-2
          .thumbnail
            a(href="/movie/#{item._id}")
              img(src="{item.poster}",alt="#{item.title}")
          .caption
            h3 #{item.title}
            p: a.btn.btn-primary(href="/movie/#{item._id}", role="button") 观看预告片

其他视图的jade类似于首页。
  还没有安装grunt的情况下,在项目目录运行 node app.js,打印start 3000!便成功运行在3000端口,地址栏输入localhost:3000便可以访问首页。端口可以自行修改,除了改代码,在命令行运行PORT=端口号 可以直接修改。
  注意 用jade一定要注意缩进

img is self closing and should not have content

  例如我遇到的这个错误,是img标签后的标签相对它有缩进,编译的时候认为它有child就不对了。
  还有在head引入文件时注意引入顺序,报如下错误应该先引入JQuery。

Bootstrap’s JavaScript requires jQuery

  这是最早的实现版本,还没有连通数据库。接下来会继续更新。
  相关源码见https://github.com/amie0119/nodejs-movie 现已实现用户注册、登录、影片展示、添加、删除等,还在不断修改中。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值