Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >启动Node.js服务器w/ Gulp“连接”中断的活重加载(角应用程序w/ html5模式)

启动Node.js服务器w/ Gulp“连接”中断的活重加载(角应用程序w/ html5模式)
EN

Stack Overflow用户
提问于 2014-09-29 12:43:48
回答 1查看 3.2K关注 0票数 2

我想解决一个困扰我一段时间的问题。

设想情况:

问题是当我使用Gulp启动本地服务器w/ Live Reload时。它很好地启动了我的角度应用程序,但是当我修改文件时,Live (页面刷新)破坏了我的应用程序,给了我一个“无法获取”,因为我的server.js (节点服务器)文件有一种特殊的方式将用户重定向到我的"index.html“文件。之所以这样做,是因为我在角应用程序中启用了"HTML5模式“(对于漂亮的URL),并且我必须在server.js文件中指定它才能正常工作。

在我打开我的角度应用程序中的"html5“之前,一切都很好,但是由于特殊的重定向,我的Gulp.js文件没有被正确地编写出来。

但是,如果我运行"node server.js“,这个角度的应用程序就会像预期的那样工作,并获得页面刷新,在开发过程中遇到这个问题会让我很恼火。

问题:

  • 如何编写gulpfile.js以正确运行server.js文件?
  • 有更好的方法来编写我的server.js文件吗?
  • 是否可能同时运行多个端口(开发模式和生产模式)?

(我漏掉了几个文件夹和文件,这样就更容易了)

档案结构:

  • 构建(角制作应用程序)
  • 前端(角度开发应用程序)
  • gulpfile.js (任务运行程序)
  • server.js (节点服务器)

Server.js (节点服务器)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var express = require('express');
var app = express();

app.use('/js', express.static(__dirname + '/front/js'));
app.use('/build', express.static(__dirname + '/../build'));
app.use('/css', express.static(__dirname + '/front/css'));
app.use('/images', express.static(__dirname + '/front/images'));
app.use('/pages', express.static(__dirname + '/front/pages'));

app.all('/*', function(req, res, next) {

    // Sends the index.html for other files to support HTML5Mode
    res.sendFile('/front/index.html', { root: __dirname });
});

var port = process.env.PORT || 8000;
app.listen(port);

Gulpfile (“连接”从第67行开始)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var gulp          = require ('gulp'),
    sync          = require ('browser-sync'),
    bower         = require ('gulp-bower'),
    htmlify       = require ('gulp-minify-html'),
    uglify        = require ('gulp-uglify'),
    prefix        = require ('gulp-autoprefixer'),
    minify        = require ('gulp-minify-css'),
    imgmin        = require ('gulp-imagemin'),
    rename        = require ('gulp-rename'),
    concat        = require ('gulp-concat'),
    inject        = require ('gulp-inject'),
    connect       = require ('gulp-connect'),
    open          = require ('gulp-open');

// Bower Task
gulp.task('bower', function() {
    return bower()
      .pipe(gulp.dest('front/js/vendors'));
});

// HTML Task
gulp.task('html', function(){
    gulp.src('front/**/*.html')
      .on('error', console.error.bind(console))
      .pipe(gulp.dest('build'))
      .pipe(connect.reload());
});

// Styles Task (Uglifies)
gulp.task('styles', function(){
    gulp.src('front/**/*.css')
      .pipe(minify())
      .on('error', console.error.bind(console))
      .pipe(gulp.dest('build'))
      .pipe(connect.reload());
});

// Scripts Task (Uglifies)
gulp.task('scripts', function(){
    gulp.src('front/**/*.js')
      .pipe(uglify())
      .on('error', console.error.bind(console))
      .pipe(gulp.dest('build'))
      .pipe(connect.reload());
});

// Image Task (compress)
gulp.task('images', function(){
    gulp.src('front/images/*')
      .pipe(imgmin())
      .pipe(gulp.dest('build/images'))
      .pipe(connect.reload());
});

// Connect Task (connect to server and live reload)
gulp.task('connect', function(){
    connect.server({
      root: 'front',
      livereload: true
    });
});

// Watch Task (watches for changes)
gulp.task('watch', function(){
    gulp.watch('front/*.html', ['html']);
    gulp.watch('front/js/*.js', ['scripts']);
    gulp.watch('front/css/*.css', ['styles']);
    gulp.watch('front/images/*', ['images']);
});

// Open Task (starts app automatically)
gulp.task("open", function(){
  var options = {
    url: "http://localhost:8080",
    app: "Chrome"
  };
  gulp.src("front/index.html")
  .pipe(open("", options));
});

gulp.task('default', ['html', 'styles', 'scripts', 'images', 'connect', 'watch', 'open']);

角应用程序

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// App Starts
angular
    .module('app', [
        'ui.router',
        'ngAnimate',
        'angular-carousel'
    ])
    .config(['$urlRouterProvider', '$stateProvider', '$locationProvider', function($urlRouterProvider, $stateProvider, $locationProvider) {
        $urlRouterProvider.otherwise("/");

        $stateProvider
            // Home Page
            .state('home', {
                url: '/',
                templateUrl: 'pages/home.html',
                controller: 'homeCtrl'
            })

        // use the HTML5 History API
        $locationProvider.html5Mode(true);
    }])

Index.html

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    <!DOCTYPE html>
    <html class="no-js" ng-app="app" ng-controller="mainCtrl">
    <head>
        <title>Website</title>
        <meta charset="utf-8"/>

        <!-- Universal Stylesheets -->
        <link href="css/stylesheet.css" type="text/css" rel="stylesheet" />
        <!-- Sets base for HTML5 mode -->
        <base href="/"></base>
    </head>

    <body>
      <section class="row main" ui-view></section>

        <!-- Javascript -->
        <script src="js/scripts.js"></script>
    </body>

    </html>

提前感谢您的帮助!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-01 17:45:55

以下是一个相当好的解决方案:)

下面是您应该使用的内容:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
gulp.task('connect', connect.server({
  root: ['build'],
  port: 9000,
  livereload: true,
  open: {
    browser: 'Google Chrome'
  },
   middleware: function(connect, opt) {
      return [ historyApiFallback ];
    }
}));

这是我用于SPA开发的模块:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
"connect-history-api-fallback": "0.0.5",

另外,AngularJs有一个避免设置基href的简洁解决方案。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
$locationProvider.html5Mode({enabled: true, requireBase: false})
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26108532

复制
相关文章
2189 数字三角形W
2189 数字三角形W 时间限制: 1 s 空间限制: 32000 KB 题目等级 : 黄金 Gold 题目描述 Description 数字三角形 要求走到最后mod 100最大 输入描述 Input Description 第1行n,表示n行 第2到n+1行为每个的权值 输出描述 Output De
attack
2018/04/13
4610
python文件操作:r、w、a、r+、w+、a+和b模式
open()函数的第一个参数为要打开的文件名,默认路径为这个脚本所在路径;第二个参数为打开模式,第三个参数为编码格式。
Python学习者
2023/04/04
9860
前端Js框架汇总
随着互联网飞速发展的时代,技术更新迭代的速度也在加快。看着Java、Js、Swift在各领域心花路放,也是煞是羡慕。寻了寻.net的消息,也是振奋人心,.net core 1,mono,xamarin等等,但大多都还在狂吼的阶段。其实一直以来对技术的理解是技术服务于业务和产品,产品又在不同程度的推进着技术的演进。
青梅煮码
2023/03/02
6.5K0
WordPress 技巧:屏蔽头部加载 s.w.org
WordPress 4.6 版本加载了一个 DNS-Prefetch(DNS 预解析)功能,通过 DNS 预解析来告诉浏览器未来我们可能从某个特定的 URL 获取资源,当浏览器真正使用到该域中的某个资源时就可以尽快地完成 DNS 解析。
Denis
2023/04/15
3100
W3C 标准_w3c规范
W3C标准,即一系列标准的集合,他的本质是结构标准语言。就像平时使用的HTML、CSS等都需要遵守这些标准。 万维网联盟创建于1994年,是web技术领域最具权威和影响力的国际中立性技术标准机构。它有效促进了web技术相互之间的兼容。就像网页是由三部分组成:结构、表现和行为。 那么他对应的标准也分三方面: 1.结构化标准语言:HTML。可扩展标记语言(XML) :最初设计目的是弥补HTML的不足。 XML好处: XHTML:可扩展超文本标记语言:当初建立XHTML的目的就是实现HTML向XML的过渡。 2.表现标准语言:CSS3(层叠样式表):有利于网站的维护。 3.行为标准:主要包括对象模型(DOM)、ECMAScript等。DOM是一种与浏览器呢、平台、语言的接口,是的可以访问页面的其他的标准组件。
全栈程序员站长
2022/09/30
9180
目前比较火的前端框架及UI组件
看到的一篇总结性的文章,收藏一下,感兴趣的可以自己看看,哪些是已经会的,哪些是没听说过的,哪些是一知半解的,都可以稍微看看。
何处锦绣不灰堆
2020/05/29
5K0
Linux下的 W 命令
w是一个命令行工具,它可以展示当前登录用户信息,并且每个用户正在做什么。它同时展示以下信息:系统已经运行多长时间,当前时间,和系统负载。
雪梦科技
2020/05/11
4.4K0
Linux下的 W 命令
JavaScript全栈开发-工具篇
作者:龙付成--腾讯高级前端工程师 @IMWeb前端社区 目录 JavaScript早期主要作为脚本语言运行在浏览器,而现在JavaScript的使用范围已经超越浏览器,向通用系统语言发展。特别是HTML5的出现,浏览器的平台化,Node.js开源项目的发展,NoSQL技术的发展,JavaScript逐渐成为跨移动平台应用程序及跨平台桌面应用程序的开发语言。 JavaScript标准有两类,一种是作为浏览器上通用行业标准的ECMAScript标准,另一种是作为浏览器外的桌面、服务器的标准CommonJS标
用户1097444
2022/06/29
1.6K0
JavaScript全栈开发-工具篇
W3C对外公布了标准HTML5的草案
W3C对外公布了标准HTML5的草案,预计正式版的标准将会在两年以后形成。HTML5是自从1997年以来对于HTML标准最为重大的一次升级。新版的HTML标准提供了绘制二维图片的接口,此外可以对音频和视频内容进行更多的控制。此次发布的只是HTML5标准的草案,最终版的标准将会在2010年制定完成,只有在届时才能够获得更多浏览器厂商的支持。
练小习
2017/12/29
6160
单服100w长连接报告笔记
建议直接看参考的原版报告,这篇为我大致记录的一些配置,部分还为理解,后续进行修改补充。
solate
2019/07/22
6920
w3c标准html5手册_在w3c中规定html决定页面的
下面的图是我在网上看到的一张图,总结的非常好。转: HTML常用标签及其用法
全栈程序员站长
2022/09/30
1.2K0
w3c标准html5手册_在w3c中规定html决定页面的
熟悉w3c标准_w3c规则
    万维网联盟(外语缩写:W3C)标准不是某一个标准,而是一系列标准的集合。网页主要由三部分组成:结构(Structure)、表现(Presentation)和行为(Behavior)。对应的标准也分三方面:结构化标准语言主要包括 XHTML 和 XML,表现标准语言主要包括 CSS,行为标准主要包括对象模型(如 W3C DOM)、ECMAScript 等。这些标准大部分由万维网联盟(外语缩写:W3C)起草和发布,也有一些是其他标准组织制订的标准,比如 ECMA(European Computer Manufacturers Association)的 ECMAScript 标准。
全栈程序员站长
2022/09/30
7060
Tweet-w1704
在Python中,使用yield实现生成器。生成器的性质是只有在被迭代的时候才运行其内部的代码。这样可以大大降低内存的占用。除此之外,yield还可以接收参数供生成器内部使用。
青南
2019/01/09
5130
3W配置
所需软件: httpd-2.2.3-11.el5_1.3 Apache主配置文件 vim /etc/httpd/conf/httpd.conf `57   ServerRoot "/etc/httpd"   设置Apache的根目录,通常使用绝对路径,下面某些数据设置使用相对路径时就是与这个设置值有关的下层目录,不需要更改。 68   Timeout 120              设置客户端联机超时时间,最好是300妙 74   KeepAlive Off            设置持续性的联机,最好是设置ON,(即一个TCP联机可以具有多个文件资料传送要求) 81   MaxKeepAliveRequests 100 跟上面有关系,这个决定该次联机能够传输的最大传输数量,可改为400 87   KeepAliveTimeout 15      在允许KeepAlive的条件下,该次联机在最后一次拴出后等待秒数,不需要更改 134  Listen 80                设置监听端口,默认的(可以改,有必要吗?) 210  Include conf.d/*.conf    当放置在conf.d/*.conf里面的设置都会被载入(虚拟主机要用这个) 251 ServerAdmin [email]root@localhost.com[/email]   设置管理员的邮箱,可以各人更改 265 ServerName 192.168.1.2:80  设置WEB服务器的监听地址和端口,当有多个网卡的时候指定监听那个网卡 281 DocumentRoot "/var/www/html" 设置Apache文档目录为/var/www/html,默认的,可以把他改在一个大的分区中。 391 DirectoryIndex index.html   设置主页文件为index.html类型 398 AccessFileName .htaccess    认证网页设置,就是需要输入用户名和密码才能浏览的页面 747 AddDefaultCharset GB2312    设置WEB服务器的默认编码为GB2312,(如果这个地方被批注起来就代表直接有网页表头来宣告字体编码) 需要将欢迎界面批注起来,免得造成测试冲突 /etc/httpd/conf.d/welcome.conf 这个文件里面全部批注起来 在网上去找个以HTML结尾的文档,把他另存为下来改名为index.heml后放在/var/www/html/下面,重启Apache服务在浏览器输入本机IP就OK老,因缺少CSS模板,所以看上去字体是乱的,正常,懂吗 Apache服务提供了一个脚本文件来快速启动服务, apachectl restart
py3study
2020/01/14
6890
2019年小白学习web前端路线图及学习攻略
Js基础教程、js内置对象常用方法、常见DOM树操作大全、ECMAscript、DOM、BOM、定时器和焦点图。
用户4962466
2019/07/16
4.8K0
2019年小白学习web前端路线图及学习攻略
MySQL分表时机:100w?300w?500w?都对也都不对!
以交友平台用户中心的user表为例,单表数据规模达到千万级别时,你可能会发现使用用户筛选功能查询用户变得非常非常慢,明明查询命中了索引,但是,部分查询还是很慢,这时候,我们就需要考虑拆分这张user表了。
JAVA葵花宝典
2021/06/17
1.1K0
3W原则[通俗易懂]
两个走线中心间距至少得大于3倍的线宽。如果线中心距不少于3倍线宽时,则可保持70%的线间电场不互相干扰,称为3W原则。如要达到98%的电场不互相干扰,可使用10W原则。一般在设计过程中因走线过密无法所有的信号线都满足3W的话,我们可以只将敏感信号采用3W处理,比如时钟走线、差分线、视频、音频,复位线,以及其他系统关键电路等,多个高速信号线长距离走线的时,为了减少线与线之间的串扰,必须强制使用3W原则。
全栈程序员站长
2022/07/05
1.3K0
3W原则[通俗易懂]
技术大咖之路:LingyuCoder的学习经历
本文转载自:https://github.com/qiu-deqing/FE-learning
疯狂的技术宅
2019/03/28
6000
史上最全的web前端学习教程汇总!
第一阶段:HTML+CSS HTML进阶、CSS进阶、div+css布局、HTML+css整站开发、 JavaScript基础:js基础教程、js内置对象常用方法、常见DOM树操作大全、ECMAscript、DOM、BOM、定时器和焦点图。 JS基本特效:常见特效、例如:tab、导航、整页滚动、轮播图、JS制作幻灯片、弹出层、手风琴菜单、瀑布流布局、滚动事件、滚差视图。 JS高级特征:正则表达式、排序算法、递归算法、闭包、函数节流、作用域链、基于距离运动框架、面向对象基础、 JQuery:基础使用悬着器、D
企鹅号小编
2018/01/11
9.8K2
史上最全的web前端学习教程汇总!
初识NodeJS
1.JavaScript 模块化规范 浏览器环境 AMD Asynchronous Module Definition RequireJS CMD Common Module Definition SeaJS Node 环境 CommonJS Node.js CommonJS 是一个社区,该社区为 JavaScript 没有触及到的领域指定了很多的规范(社区制定的) JavaScript 模块化、IO操作、网络编程、二进制操作 ECMAScript(任何环境都可以) ECMAScript 6、E
用户1174387
2018/01/17
2K0
初识NodeJS

相似问题

使用Gulp w/特定模式重命名文件

16

Gulp w/Browsersync Boot,但不重新加载页面

24

h/w和s/w中断的实现差异

10

因编译错误而中断的凤凰活重加载

12

BrowserSync (w/ gulp)工作非常慢

14
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文