[
https://issues.apache.org/jira/browse/CB-9127?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14578549#comment-14578549
]
ASF GitHub Bot commented on CB-9127:
------------------------------------
Github user vladimir-kotikov commented on a diff in the pull request:
https://github.com/apache/cordova-lib/pull/238#discussion_r31990983
--- Diff: cordova-serve/src/server.js ---
@@ -0,0 +1,137 @@
+/**
+ Licensed to the Apache Software Foundation (ASF) under one
+ or more contributor license agreements. See the NOTICE file
+ distributed with this work for additional information
+ regarding copyright ownership. The ASF licenses this file
+ to you under the Apache License, Version 2.0 (the
+ "License"); you may not use this file except in compliance
+ with the License. You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+ Unless required by applicable law or agreed to in writing,
+ software distributed under the License is distributed on an
+ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ KIND, either express or implied. See the License for the
+ specific language governing permissions and limitations
+ under the License.
+ */
+
+var fs = require('fs'),
+ http = require('http'),
+ url = require('url'),
+ path = require('path'),
+ Q = require('q'),
+ stream = require('./stream');
+
+/**
+ * @desc Launches a server with the specified options and optional custom
handlers.
+ * @param {{root: ?string, port: ?number, urlPathProcessor: ?function,
streamHandler: ?function, serverExtender: ?function}} opts
+ * @returns {*|promise}
+ */
+module.exports = function (opts) {
+ var deferred = Q.defer();
+
+ var root = opts.root;
+ var port = opts.port || 8000;
+
+ var server = http.createServer(function (request, response) {
+ function do404() {
+ console.log('404 ' + request.url);
+ response.writeHead(404, {'Content-Type': 'text/plain'});
+ response.write('404 Not Found\n');
+ response.end();
+ }
+
+ function do302(where) {
+ console.log('302 ' + request.url);
+ response.setHeader('Location', where);
+ response.writeHead(302, {'Content-Type': 'text/plain'});
+ response.end();
+ }
+
+ function do304() {
+ console.log('304 ' + request.url);
+ response.writeHead(304, {'Content-Type': 'text/plain'});
+ response.end();
+ }
+
+ function isFileChanged(path) {
+ var mtime = fs.statSync(path).mtime,
+ itime = request.headers['if-modified-since'];
+ return !itime || new Date(mtime) > new Date(itime);
+ }
+
+ var urlPath = url.parse(request.url).pathname;
+
+ var filePath;
+ if (opts.urlPathProcessor) {
+ var result = opts.urlPathProcessor(urlPath, request, response,
do302, do404);
+ if (!result) {
+ return;
+ }
+ filePath = result.filePath;
+ }
+ if (!filePath) {
+ if (!root) {
+ throw new Error('No server root directory HAS BEEN
specified!');
+ }
+ filePath = path.join(root, urlPath);
+ }
+
+ fs.exists(filePath, function (exists) {
+ if (!exists) {
+ do404();
+ return;
+ }
+ if (fs.statSync(filePath).isDirectory()) {
+ var index = path.join(filePath, 'index.html');
+ try {
+ if (fs.statSync(index)) {
--- End diff --
Why `try...catch` instead of just `fs.existSync`?
> Implement cordova-serve module
> ------------------------------
>
> Key: CB-9127
> URL: https://issues.apache.org/jira/browse/CB-9127
> Project: Apache Cordova
> Issue Type: Improvement
> Components: Browser, CordovaLib
> Reporter: Tim Barham
> Assignee: Tim Barham
>
> The `cordova serve` command provided by `cordova-lib`, and `cordova run
> browser` provided `cordova-browser` both provide basic server functionality
> that is duplicated in two places. We should combine this into a single
> `cordova-serve` module that can be used by both.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]