首先下载node,下载好后查看版本node -v
【项目创建】对于express,其实有一种更普遍的方法,那就是直接用它来创建一个项目:
比如,我要创建项目express_test 就输入:express -e express_test
项目创建成功之后,生成4个文件夹,主文件app.js与配置信息文件packetage.json
①bin是项目的启动文件,配置以什么方式启动项目,默认 npm start
②public是项目的静态文件,放置js css img等文件
③routes是项目的路由信息文件,控制地址路由
④views是视图文件,放置模板文件ejs或jade等(其实就相当于html)
⑤express这样的MVC框架模式,是一个Web项目的基本构成
【模块安装】:
一般我们创建新项目的时候也要先给他安装相应的模块
我们直接使用npm install 就行了,它会自动检测package.json文件下载安装相应的模块
之后可以先启动下项目:默认 npm start,启动成功后可以到浏览器查看下,或者自己修改----http://localhost:3000/
【最后】随手谈一下上面提到的require相关的知识
编写稍大一点的程序时一般都会将代码模块化,在NodeJS中,一般将代码合理拆分到不同的JS文件中,每一个文件就是一个模块,而文件路径就是模块名。
在编写每个模块时,都有require、exports、module三个预先定义好的变量可供使用。
(一)require函数用于在当前模块中加载和使用别的模块,传入一个模块名,返回一个模块导出对象。
模块名可使用相对路径(以./开头),或者是绝对路径(以/或C:之类的盘符开头),模块名中的.js扩展名可以省略
举个例子:var func1 = require("./func1");// 是与当前main.js同路径下的func1.js模块
(二)exports对象是当前模块的导出对象,用于导出模块公有方法和属性
别的模块通过require函数使用当前模块时得到的就是当前模块的exports对象
比如上面提到的,我们可以这样写代码然后导出来:
exports.func1 = function(){
console.log("This is func1");
};
(三)module对象可以访问到当前模块的一些相关信息,但最多的用途是替换当前模块的导出对象(将导出对象改为函数)
例如模块导出对象默认是一个普通对象,如果想改成一个函数的话,可以使用以下方式。
func1.js:
module.exports = function () {
console.log('Hello World!');
};
这样一来模块默认导出对象被替换为一个函数
//在func1.js里边这样
module.exports = function(name, age) {
this.name = name;
this.age = age;
this.about = function() {
console.log(this.name +' is '+ this.age +' years old')}};
//然后在main.js里边这样
var Func1 = require('./func1.js');
var r = new Func1('xiaoming', 12);
r.about(); // xiaoming is 12 years old
【解析小段node代码】:
var http = require('http');上面说到了,http是nodeJS里边内置的对象模块,我们使用require这种方式把它引进来
然后http现在这个对象模块有一个方法是http.createServer(),这个方法创建一个服务之后再监听一个地址:http.createServer().listen(port,ip)
从而搭建了一个服务器
createServer()里边有一个匿名函数,主要就是用来处理相关信息了。req是请求request,res是回复response。
req一般用于请求阶段的解析处理等,比如常见的get中的地址栏url字符的处理。res一般用于收到请求后相应的操作,比如写响应头响应体渲染页面等等。
在这里,res.writeHead(200, {'Content-Type': 'text/plain'});就相当于写了个响应头, res.end('Hello World\n');相当于写了个响应体。
nodeJS提供了很多内置对象方法,比如http,fs,EventEmitter,url等等
【构建项目】
(一)修改模板引擎文件:
现在开始解析如何构建这个小项目:直接使用了后缀名 .html ,所以我们要先修改一下ejs模板,再把原来views目录下模板文件后缀改成 .html
var app = express(); // view engine setup app.set('views', path.join(__dirname, 'views')); app.engine("html",require("ejs").__express); //app.set("view engine","ejs"); app.set('view engine', 'html');
(二)创建模板:error.html,home.html,index.html,login.html,register.html
其中 <%= title %>使用到了模板 连接<a> 直接使用了路由路径的方法,这里我的bootstrap引用的网上的,如果本地有的话可以调用本地
<h1><%= message %></h1> <h2><%= error.status %></h2> <pre><%= error.stack %></pre>
user.name 就是使用ejs模板通过session.user来获取user对象,这里user有name和password的属性
<!DOCTYPE html> <html> <head> <title><%= title %></title> <link rel="stylesheet" href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css"> <style type="text/css"> a{margin-left: 20px; text-decoration: none;} a:hover{text-decoration: underline;} </style> </head> <body> <h1>Your name: <%- user.name %></h1> <p>Welcome to your home ~</p> <p><a href="/logout">我要注销 </a> </p> </body> </html>
<!DOCTYPE html> <html> <head> <title><%= title %></title> <link rel="stylesheet" href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css"> <style type="text/css"> a{margin-left: 20px; text-decoration: none;} a:hover{text-decoration: underline;} </style> </head> <body> <h1><%= title %></h1> <p>Welcome to <%= title %></p> <p><a href="/login">登录 </a> <a href="/register"> 注册</a> </p> </body> </html>
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width,initial-scale=1.0"> <title><%= title %></title> <link rel="stylesheet" href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css"> <style type="text/css"> .m15{ margin: 15px;} .tc{ text-align: center;font-size: 18px;font-weight: 600;} </style> </head> <body screen_capture_injected="true"> <div class="container"> <%- message %> <form class="col-sm-offset-4 col-sm-4 form-horizontal" role="form" method="post" onsubmit="return false"> <fieldset> <legend></legend> <div class="panel panel-default"> <div class="panel-heading"> <p class="tc">请先登录</p> </div> <div class="panel-body m15"> <div class="form-group"> <div class="input-group"> <span class="input-group-addon"> <span class="glyphicon glyphicon-user"></span> </span> <input type="text" class="form-control" id="username" name="username" placeholder="请输入用户名" required> </div> </div> <div class="form-group"> <div class="input-group"> <span class="input-group-addon"> <span class="glyphicon glyphicon-lock"></span> </span> <input type="text" class="form-control" id="password" name="password" placeholder="请输入密码" required> </div> </div> <div class="form-group"> <button type="submit" class="btn btn-primary btn-block" id="login0">登录</button> </div> <div class="form-group"> <button type="button" class="btn btn-info col-sm-2 col-sm-offset-10" id="register0">注册</button> </div> </div> </div> </fieldset> </form> </div> <script src="https://cdn.bootcss.com/jquery/2.1.1/jquery.min.js"></script> <script src="https://cdn.bootcss.com/bootstrap/3.3.7/js/bootstrap.min.js"></script> <script type="text/javascript"> $(function(){ $("#register0").click(function(){ location.href = 'register'; }); $("#login0").click(function(){ var username = $("#username").val(); var password = $("#password").val(); var data = {"uname":username,"upwd":password}; $.ajax({ url:'/login', type:'post', data: data, success: function(data,status){ if(status == 'success'){ location.href = 'home'; } }, error: function(data,status){ if(status == 'error'){ location.href = 'login'; } } }); }); }); </script> </body> </head> </html>
注册方式主要是把原始 form表单 onsubmit="return false" 防止默认提交,然后在输入信息正确的情况下,通过ajax,把表单信息post到路径/register
然后我们就通过路由功能根据此路径来处理信息
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width,initial-scale=1.0"> <title><%= title %></title> <link rel="stylesheet" href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css"> <style type="text/css"> .m15{ margin: 15px;} .tc{ text-align: center;font-size: 18px;font-weight: 600;} </style> </head> <body screen_capture_injected="true"> <div class="container"> <%- message %> <form class="col-sm-offset-4 col-sm-4 form-horizontal" role="form" method="post" onsubmit="return false"> <fieldset> <legend></legend> <div class="panel panel-default"> <div class="panel-heading"> <p class="tc">注册信息</p> </div> <div class="panel-body m15"> <div class="form-group"> <div class="input-group"> <span class="input-group-addon"> <span class="glyphicon glyphicon-user"></span> </span> <input type="text" class="form-control" id="username" name="username" placeholder="请输入用户名" required> </div> </div> <div class="form-group"> <div class="input-group"> <span class="input-group-addon"> <span class="glyphicon glyphicon-lock"></span> </span> <input type="text" class="form-control" id="password" name="password" placeholder="请输入密码" required> </div> </div> <div class="form-group"> <div class="input-group"> <span class="input-group-addon"> <span class="glyphicon glyphicon-lock"></span> </span> <input type="text" class="form-control" id="password1" name="password1" placeholder="请再次输入密码" required> </div> </div> <div class="form-group"> <button type="submit" class="btn btn-primary btn-block" id="register1">注册</button> </div> <div class="form-group"> <button type="button" class="btn btn-info col-sm-2 col-sm-offset-10" id="login1">登录</button> </div> </div> </div> </fieldset> </form> </div> <script src="https://cdn.bootcss.com/jquery/2.1.1/jquery.min.js"></script> <script src="https://cdn.bootcss.com/bootstrap/3.3.7/js/bootstrap.min.js"></script> <script type="text/javascript"> $(function(){ $("#login1").click(function(){ location.href = 'login'; }); $("#register1").click(function(){ var username = $("#username").val(); var password = $("#password").val(); var password1 = $("#password1").val(); if(password !== password1){ $("#password").css("border","1px solid red"); $("#password1").css("border","1px solid red"); }else if(password === password1){ var data = {"uname":username,"upwd":password}; $.ajax({ url: '/register', type: 'post', data: data, success: function(data,status){ if(status == 'success'){ location.href = 'login'; } }, error: function(data,err){ location.href = 'register'; } }); } }); }); </script> </body> </head> </html>
(三)配置模板路由,让浏览器访问到路径后得以被解析
在app.js里添加路由配置
var express = require('express'); var routes = express.Router(); app.use('/', routes); // 为路径 / 设置路由 app.use('/users', users); // 为路径 /users 设置路由 app.use('/login',routes); // 为路径 /login 设置路由 app.use('/register',routes); // 为路径 /register 设置路由 app.use('/home',routes); // 为路径 /home 设置路由 app.use("/logout",routes); // 为路径 /logout 设置路由 //app.use是一个中间件的用法,这里的routes看初始项目的下两句代码,就是引用了routes文件夹下的index.js模块 //var routes = require('./routes/index'); //var users = require('./routes/users');
(四)创建项目数据库和超级管理员:
【操作数据库】数据库集合collection,文档设置insert
cmd命令行里:
mongo//进入数据库
use nodedb//创建项目数据库
db.addUser("shuaige", "123456")//给这个数据库创建了一个叫帅哥的账号,密码123456 (但是我觉得可能我理解的不到位,你也可以不做这个操作)
若以授权方式启动数据库,那么我们可以进行管理员验证,之后可以继续操作
然后,我们就为这个nodedb数据库创建collection(collection就相当于oracle和mysql里的table)
db.createCollection("users")//创建一个集合,也就是表 db.users.insert({user: "admin", password: "123456"})//给users里添加一个文档,也就是一条记录账号admin,密码123456
ok,现在检查一下:
db.users.find() //如果看到你刚刚添加的文档记录,就ok咯
现在我的nodedb数据库里已经有了用户admin,之后操作就在nodedb数据库里进行
(五)连接数据库:
mongodb主要有两种使用方法,这里使用了其中的一种:使用 mongoose
Mongoose是MongoDB的一个对象模型工具,是基于node-mongodb-native开发的MongoDB nodejs驱动,可以在异步的环境下执行。
同时它也是针对MongoDB操作的一个对象模型库,封装了MongoDB对文档的的一些增删改查等常用方法,让NodeJS操作Mongodb数据库变得更加灵活简单
安装模块:npm i mongoose
在项目根目录下建立一个database文件夹,建立文件models.js然后建立model处理文件 dbHandel.js
写入文件 models.js,一个user集合,有name和password属性
module.exports = { user:{ name:{type:String,required:true}, password:{type:String,required:true} } };
写入文件 dbHandel.js 里边主要是获取 Schema 然后处理获取 model ,最后就是返回一个model了(提供其他文件对model的操作)
var mongoose = require('mongoose'); var Schema = mongoose.Schema; var models = require("./models"); for(var m in models){ mongoose.model(m,new Schema(models[m])); } module.exports = { getModel: function(type){ return _getModel(type); } }; var _getModel = function(type){ return mongoose.model(type); };
app.js加上连接数据库:
var mongoose = require('mongoose'); global.dbHandel = require('./database/dbHandel'); global.db = mongoose.connect("mongodb://localhost/nodedb"); app.use(bodyParser.urlencoded({ extended: true })); app.use(cookieParser());app.js加上session模块,因为使用到了session(比如进入home的时候判断session值是否为空),所以需要express-session 模块 命令:npm i express-session,在app.js中引用它并作初始设置
相关推荐
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境,它允许开发者使用 JavaScript 语言在服务器端编写可扩展的网络应用。Node.js 利用了事件驱动、非阻塞I/O模型,使其在处理高并发请求时表现出极高的性能。...
标题中的“Node.js-基于Node.js Expressejs MongoDB Bootstrap搭建的班级博客系统”揭示了这个项目的核心技术栈,包括Node.js、Express、ejs模板引擎、MongoDB数据库以及Bootstrap前端框架。接下来,我将详细阐述...
标题中提到的“基于Node快速构建WEB应用服务的框架”可能是指Express.js、Koa.js、Sails.js等常见的Node.js框架之一。这些框架都有其独特的特点和优势,使得开发过程更加便捷。 1. **Express.js**:Express是最广泛...
在本教程中,我们将探索如何使用Node.js搭建一个博客系统,这是系列的第一部分,主要涉及Node.js的安装以及Express框架的基础知识。Node.js是一个开放源码、跨平台的JavaScript运行环境,它允许开发者在服务器端运行...
Node.js是一个基于Chrome V8引擎的JavaScript运行环境,它让JavaScript能够在服务器端执行,打破了JavaScript只能在浏览器端使用的限制。Node.js具有非阻塞I/O模型,使其在处理高并发场景时表现出色,常用于构建高...
Node.js是一款基于Chrome V8引擎的JavaScript运行环境,它让JavaScript可以在服务器端执行,极大地拓宽了JavaScript的应用领域。Express是Node.js中最流行的Web应用程序框架,它提供了一套简洁的API,使得构建Web...
Node.js是一个基于Chrome V8引擎的JavaScript运行环境,它让开发者可以在服务器端使用JavaScript编写代码。其非阻塞I/O模型和事件驱动特性使其在处理高并发场景下表现出色。 **二、Express框架** Express是Node.js...
"Node.js-基于TypescriptExpress的web开发工程模板"是一个面向Node.js和TypeScript开发者的实用工具,它简化了项目初始化的步骤,帮助开发者快速搭建一个具备基本功能的Web应用。通过学习和使用这样的模板,开发者...
在“Node.js-这是一个用NodeExpress框架搭建的博客环境”项目中,我们主要会涉及到以下几个核心知识点: 1. **Node.js基础**:理解事件驱动、非阻塞I/O模型,了解模块系统(CommonJS),学习使用Node.js内置模块如...
Express.js是Node.js的一个Web应用框架,简化了构建RESTful API的过程。EJS(Embedded JavaScript Templates)则是一种轻量级的模板引擎,用于动态生成HTML页面。 本项目"Node.js-基于nodemongodbexpressejs技术栈...
结合Express.js这样的Web框架,开发者可以快速搭建高效的Web应用程序。同时,Node.js的非阻塞I/O模型使其在处理大量并发连接时表现出色,适合构建高性能的网络应用。 总的来说,Node.js 14.17.3版本的Windows x64...
标题中的“Node.js-基于node.JS(Express)Socket.IO的同屏展示程序”表明这是一个使用Node.js构建的项目,具体来说,它依赖于Express框架和Socket.IO库来实现同屏展示的功能。让我们深入探讨一下这些关键概念以及它们...
在 Node.js 的世界里,有许多知名的脚手架工具,如 Express Generator,它用于快速搭建基于 Express 框架的应用。而“yunagile-cli-master”可能是一个特定的、自定义的脚手架工具,名为 YunAgile CLI(Command Line...
【Node.js-移动端网络调试基于express的JsServerDemo】是一个示例项目,旨在教你如何使用Node.js和Express框架创建一个简单的服务器,以便进行移动端网络调试。在这个教程中,我们将深入探讨Node.js的基础知识,了解...
Node.js是一个基于Chrome V8引擎的JavaScript运行环境,它允许开发者在服务器端使用JavaScript编写代码。Node.js采用了事件驱动、非阻塞I/O模型,使其在处理高并发请求时表现出色,尤其适合构建网络应用和服务。 ##...
同时,开发者还可以利用Node.js的模块系统和强大的第三方库,如Express.js(web框架)、MongoDB(NoSQL数据库驱动)等,构建复杂的后端服务。 总结来说,Node.js v14.15.0 LTS是Windows x64用户的理想选择,其稳定...
标题中的“Node.js-基于node.js(Express)和socket.io的网页同屏展示程序”表明这是一个使用Node.js作为后端框架,结合Express.js构建Web应用,并利用socket.io实现实时通信的项目。这个项目旨在创建一个能够让用户在...
在本文中,我们将深入探讨如何使用Node.js的Express框架构建一个Web登录服务,并结合MongoDB数据库来存储用户信息。Node.js是一种基于Chrome V8引擎的JavaScript运行环境,它让开发者能够在服务器端使用JavaScript...