一、创建express

1.创建一个单独文件

2.打开命令面板,进入该文件

3.npm config set registry = https://registry.npm.taobao.org(设置代理网络)

4.npm config list(查看是否成功代理)

5.百度express第一个链接进去查看express安装

第一步:npm install express-generator -g 创建一个骨架

第二步:express --view=pug myapp 创建一个名字为myapp(自拟)的应用

第三步:cd myapp 进入应用目录

第四步:npm install 安装所需要的依赖,一般为内部依赖在node_modules文件夹下

  我们使用的是mongoose,Mongoose是在node.js异步环境下对mongodb进行便捷操作的对象模型工具,在安装mongodb以后,用npm install mongoose命令行安装依赖。安装成功后,就可以通过 require('mongoose') 来使用。

第五步:npm start 启动应用

二、简述express应用下的文件

1.bin目录:www文件配置应用端口

var port = normalizePort(process.env.PORT || '5200');  

  即,端口为5200,可以自行更改

2.node_modules目录:放的是内置依赖

  我们用的jQuery、esayUi都可以放在里面,可以手动增加依赖,在该应用终端下npm install (依赖名) --save 一般我们都放在内置里面所有--save,也可以不用

3.public目录:放置静态内容

  有图片,css样式,JavaScript,和静态页面,与我们平时写的一样。

4.routes目录:路由-表现层

  导入业务:

const xxxService = require("../service/xxxService");

  导出路由:

module.exports = router;

5.service目录:业务层

  导入链路操作:

const xxxsDao = require("../dao/xxxsDao");

  导出其操作方法:

module.exports = { xxx, xxx }

接收路由routes传来的数据,进行进一步业务处理传输给Dao层(数据链路层),dao层返回数据回来,然后传给路由routes表现层。

6.dao目录:数据链路层

  具体是进行对数据库的操作,一般为增删查改。

1.在dao下还有一个models文件夹,放置数据库模板。

例如:创建一个用户模板booksModel

//搭骨架
const mongoose = require("mongoose");
const booksSchema = new mongoose.Schema({ //创建骨架,//创建了一个users骨架,schema是mongoose里会用到的一种数据模式,可以理解为表结构的定义;每个schema会映射到mongodb中的一个collection,它不具备操作数据库的能力
name: String,//数据库里面的数据类型和其对应名字,键对值类型
headImg: String,
author: String,
press: String,
inventory: String,
}, {
versionKey: false
});
const booksModle = mongoose.model("books", booksSchema, "books"); //根据骨架创建模板,第一个骨架的名字,自定义的;第二个骨架;第三个数据库的db名字 模板就有了
module.exports = booksModle;//然后将其模板导出

2.而dao.js文件一般就是对数据的操作了。

例:create(object)增  deleteOne{id}删  find()查询全部  update({ id}, { $set: object })根据id查找然后修改

3.还有一个db.js。

里面是连接数据库的操作。

//连接数据库
const mongoose = require("mongoose");
mongoose.connect("mongodb://localhost/tushuguan", {//xxx表示连接的数据库名
useNewUrlParser: true,
useUnifiedTopology: true
});
mongoose.connection.on("connected", function () {//connected事件来监听连接成功
console.log("mongoose已经成功连接上");
});
require('./models/booksModel');

三、跨域问题(同源策略)——代理服务器

  首先我们不得不提起一个概念——同源策略,所谓同源指域名、协议、端口均相同,而一个浏览器不能同时执行其他网站的脚本,由浏览器的同源策略造成,施加的安全限制。

  因此我们就想到了用跨域来解决同源问题,但是跨域又会受三种限制:

  1. Cookie、LocalStorage和IndexDB无法读取,同源,登录可以缓存,共享本地存储数据
  2. DOM无法获得
  3. Ajax请求不能发送

  若是我们一定要跨域呢?那么就有以下的方法解决同源策略的方案:

  1、JsonP     2、cors方针(报错推荐)    3、代理服务器(首选)

  接下来我们就了解一下代理服务器的工作原理和方法。

  代理服务器的访问过程:浏览器=>代理服务器=>被代理的服务器,返回就是方向反过来传递。代理服务的作用就是起一个中转作业,将浏览器的请求转发到代理服务器,并且将返回结果原封不动的传回给浏览器。而我们搭建代理服务器的方法和搭建主服务器类似,都使用了express、NodeJS等技术。

  首先我们需要通过命令行 “express --view=pug proxyapp” 创建新的文件夹,再次重复创建express。代理服务就在新的文件夹中操作。

  其次进行配置。需要借助两个npm包,一个是web开发框架express,一个是express中间件http-proxy-middleware。“npm install http-proxy-middleware --save”。

  现在我们有了两个工程文件:一个我们主服务(被代理服务器)叫myapp(3000端口),一个代理服务器叫proxyapp(5200端口)。

第一步:搭建接口服务器,接口服务器端口号为5200自己根据情况定义。

      在工程化下,我们在proxyapp代理服务器下创建一个util工具文件夹,专门放一些工具。创建options.js文件,代码如下:

module.exports = {
target: "http://127.0.0.1:3000",//这里是被代理的端口号,目标网站
changeOrigin: true,//changeOrigin是否更改host。true为更改,false为不更改(默认值)
pathRewrite: {//pathRewrite路径重写
'^/api': '/', //rewrite path
}
}
//直接导出

第二步:在proxyapp下的app.js文件设置代理转发

//代理转发,自动的
const proxy = require("http-proxy-middleware"); //导入第三方模块
const options = require("./util/options");
app.use("/api", proxy(options));

第三步:在页面的ajax请求里面的url书写如下

url:"./api/xxx"(xxx为正常访问的地址)  

  最后,代理转发搭建好了,我们就可以在代理服务器的public文件夹中写静态页面,在静态页面的书写中也要注意使用工程化。

WEB Node-JS 服务器搭建的更多相关文章

  1. 使用免费 mongodb数据库 + 免费node.js服务器搭建小程序接口

    由于微信的小程序只支持不带端口的域名接口,不支持IP地址和接口,所以我们需要映射到80端口并绑定备案过的域名才能被微信小程序访问到.简单点就是接口需要 https 协议才行,找了许久的免费的数据库与n ...

  2. node.js服务器搭建

    //1.导入http 核心模块 const http = require("http"); //2.调用http.createServer 方法,创建一个web 服务器对象 con ...

  3. 搭建一个简单的node.js服务器

    第一步:安装node.js.可以去官网:https://nodejs.org/en/进行下载. 查看是否成功,只需在控制台输入 node -v.出现版本号的话,就证明成功了. 第二步:编写node.j ...

  4. paip.最好的脚本语言node js 环境搭建连接mysql

    paip.最好的脚本语言node js 环境搭建连接mysql #====下载node...走十一个exe..容易的.. 1 #0----Hello world   .js 2 #---------模 ...

  5. Node.js 环境搭建及简单应用

    Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境.Node.js 使用了一个事件驱动.非阻塞式 I/O 的模型.如果你想创建自己的服务,那么Node.js是一个非 ...

  6. node.js环境搭建

    (1)Node.js安装 Node.js安装包及源码下载地址为: https://nodejs.org/download/   , 双击下载后的安装包.msi,检查Node.js版本命令:node - ...

  7. Node.js环境搭建和学习(windwos环境)

    Node.js环境搭建和学习 一.环境搭建 1.下载安装文件 下载地址http://nodejs-org.qiniudn.com/下载Node.js环境安装包,根据操作系统下载对应的安装包 下载地址 ...

  8. Node.js环境搭建&&npm安装

    Node.js环境搭建 什么使Node.js呢?我们知道JavaScript开始作为客户端语言,但早已在浏览器端一统江湖,这时,野心越来越大,它就想向服务器端拓展了,于是Node.js就是这样的,我们 ...

  9. nodejs,node原生服务器搭建实例

    nodejs,node原生服务器搭建实例

  10. 用Node.JS+MongoDB搭建个人博客(页面模板)(五)(结束)

    <差不多先生> 我是差不多先生,我的差不多是天生.也代表我很天真,也代表我是个闲人.这差不多的人生,总是见缝插针. 求学的道路上总是孤独的,即使别人不理解我,认为我是奇葩!但没关系,我会坚 ...

随机推荐

  1. Node.js入门-知识整理

    目的:使用Node.js实现文件上传并将上传的文件显示到浏览器中 基本工具:Node.js,在windows下需要下载cygwin64来运行shell命令 文件:服务器模块.请求路由模块.请求处理程序 ...

  2. HDU5618 Jam's problem again CDQ分治

    Jam's problem again CDQ分治 传送门:http://acm.hdu.edu.cn/showproblem.php?pid=5618 题意: \[ 有n 个元素,第 i 个元素有 ...

  3. Android程序分析环境(搭建步骤略)

    1:安装JDK JDK(Java Development Kit) 是 Java 语言的软件开发工具包(SDK).没有JDK的话,无法编译Java程序. 2:安装Android  SDK Androi ...

  4. 关于启动php-fpm失败的解决办法

    当我执行 sudo lnmp php-fpm restart会出现如下错误 Starting php-fpm /usr/local/php/sbin/php-fpm: error while load ...

  5. springMvc web项目中restful风格的api路径中有小数点会被过滤后台拿不到最后一个小数点的问题

    有两种解决方案: 1:在api路径中加入:.+ @RequestMapping("/findByIp/{ip:.+}") public Object test(@PathVaria ...

  6. Java8 LocalDate计算两个日期的间隔天数

    Java8新增了java.time包,提供了很多新封装好的类,使我们可以摆脱原先使用java.util.Time以及java.util.Calendar带来的复杂. 其中LocalDate正是本文中使 ...

  7. Linux 安装 Nvidia 驱动出现的黑屏各种问题和解决方式

    之前因为想OBS支持h264-nvenc这个功能然后就编译ffmpeg,然后使用Github上面的一个编译项目),项目编译完成之后重启电脑,然后就进入不了系统的登录页面了,选择进入Linux系统之后就 ...

  8. ProxyPattern(代理模式)-----Java/.Net

    在代理模式(Proxy Pattern)中,一个类代表另一个类的功能.这种类型的设计模式属于结构型模式.

  9. ThreadLocal解析:父线程的本地变量不能传递到子线程详解

    众所周知,ThreadLocal类是java提供线程本地变量的工具类.但父线程的本地变量却不能被子线程使用,代码如下: public static void main(String[] args) { ...

  10. Windows系统下批处理快速创建WIFI

    为什么要用cmd这种古老的东西创建wifi呢,电脑管家.360安全卫士都有这种插件,一键开启关闭,多方便啊! 开始用的也是电脑管家的免费wifi插件,但是我越来越不能忍它极慢的启动关闭过程,每一次看着 ...