2013-10-03 27 views
5

Tôi đang phát triển một ứng dụng góc, tôi muốn chạy ứng dụng bằng máy chủ web sử dụng node.js giống như dự án hạt giống góc https://github.com/angular/angular-seed. Tôi sao chép ứng dụng hạt góc trong con đường địa phương của tôi và tôi chạy nó như saumáy chủ web sử dụng nodejs cho ứng dụng góc của tôi

mở dấu nhắc lệnh

Tôi chỉ cần chạy lệnh sau Node scripts\web-server.js tại dấu nhắc lệnh, xem ảnh chụp màn hình

enter image description here

sau đó tôi kiểm tra trong ứng dụng trình duyệt đang hoạt động chính xác

enter image description here

Sau đó, tôi thử làm tương tự cho ứng dụng thử nghiệm của mình, ở đây tôi đã tạo ứng dụng góc của riêng mình và sao chép tệp web-server.js vào thư mục tập lệnh của ứng dụng thử nghiệm của tôi như minh họa trong ảnh chụp màn hình bên dưới.

enter image description here enter image description here

Sau đó, tôi làm các bước sau mở dấu nhắc lệnh

sau đó tôi chỉ cần chạy lệnh sau Node scripts\web-server.js tại dấu nhắc lệnh, xem ảnh chụp màn hình

nhưng những gì tôi nhận được là thấy ảnh chụp màn hình

enter image description here

Tôi muốn chạy ứng dụng của mình giống như ứng dụng hạt giống góc trong máy chủ web bằng cách sử dụng node.js.

My Index.html

<!Doctype html> 
<html data-ng-app> 
<head> 
    <meta charset="UTF-8"> 
    <title>angular JS directive demo</title> 
    <script src="angular.js"></script> 
</head> 
<body> 
    Name: 
    <input type="text" data-ng-model="name" /> {{ name }} 
    <div class="container" data-ng-init="names=['aaa','bbb','ccc']"> 
     <ul> 
      <li ng-repeat="personName in names"> {{ personName }}</li> 
     </ul> 
    </div> 

</body> 
</html> 

Web-server.js. Tập tin này tôi đã sao chép từ dự án hạt giống góc.

#!/usr/bin/env node 

var util = require('util'), 
    http = require('http'), 
    fs = require('fs'), 
    url = require('url'), 
    events = require('events'); 

var DEFAULT_PORT = 8000; 

function main(argv) { 
    new HttpServer({ 
    'GET': createServlet(StaticServlet), 
    'HEAD': createServlet(StaticServlet) 
    }).start(Number(argv[2]) || DEFAULT_PORT); 
} 

function escapeHtml(value) { 
    return value.toString(). 
    replace('<', '&lt;'). 
    replace('>', '&gt;'). 
    replace('"', '&quot;'); 
} 

function createServlet(Class) { 
    var servlet = new Class(); 
    return servlet.handleRequest.bind(servlet); 
} 

/** 
* An Http server implementation that uses a map of methods to decide 
* action routing. 
* 
* @param {Object} Map of method => Handler function 
*/ 
function HttpServer(handlers) { 
    this.handlers = handlers; 
    this.server = http.createServer(this.handleRequest_.bind(this)); 
} 

HttpServer.prototype.start = function(port) { 
    this.port = port; 
    this.server.listen(port); 
    util.puts('Http Server running at http://localhost:' + port + '/'); 
}; 

HttpServer.prototype.parseUrl_ = function(urlString) { 
    var parsed = url.parse(urlString); 
    parsed.pathname = url.resolve('/', parsed.pathname); 
    return url.parse(url.format(parsed), true); 
}; 

HttpServer.prototype.handleRequest_ = function(req, res) { 
    var logEntry = req.method + ' ' + req.url; 
    if (req.headers['user-agent']) { 
    logEntry += ' ' + req.headers['user-agent']; 
    } 
    util.puts(logEntry); 
    req.url = this.parseUrl_(req.url); 
    var handler = this.handlers[req.method]; 
    if (!handler) { 
    res.writeHead(501); 
    res.end(); 
    } else { 
    handler.call(this, req, res); 
    } 
}; 

/** 
* Handles static content. 
*/ 
function StaticServlet() {} 

StaticServlet.MimeMap = { 
    'txt': 'text/plain', 
    'html': 'text/html', 
    'css': 'text/css', 
    'xml': 'application/xml', 
    'json': 'application/json', 
    'js': 'application/javascript', 
    'jpg': 'image/jpeg', 
    'jpeg': 'image/jpeg', 
    'gif': 'image/gif', 
    'png': 'image/png', 
  'svg': 'image/svg+xml' 
}; 

StaticServlet.prototype.handleRequest = function(req, res) { 
    var self = this; 
    var path = ('./' + req.url.pathname).replace('//','/').replace(/%(..)/g, function(match, hex){ 
    return String.fromCharCode(parseInt(hex, 16)); 
    }); 
    var parts = path.split('/'); 
    if (parts[parts.length-1].charAt(0) === '.') 
    return self.sendForbidden_(req, res, path); 
    fs.stat(path, function(err, stat) { 
    if (err) 
     return self.sendMissing_(req, res, path); 
    if (stat.isDirectory()) 
     return self.sendDirectory_(req, res, path); 
    return self.sendFile_(req, res, path); 
    }); 
} 

StaticServlet.prototype.sendError_ = function(req, res, error) { 
    res.writeHead(500, { 
     'Content-Type': 'text/html' 
    }); 
    res.write('<!doctype html>\n'); 
    res.write('<title>Internal Server Error</title>\n'); 
    res.write('<h1>Internal Server Error</h1>'); 
    res.write('<pre>' + escapeHtml(util.inspect(error)) + '</pre>'); 
    util.puts('500 Internal Server Error'); 
    util.puts(util.inspect(error)); 
}; 

StaticServlet.prototype.sendMissing_ = function(req, res, path) { 
    path = path.substring(1); 
    res.writeHead(404, { 
     'Content-Type': 'text/html' 
    }); 
    res.write('<!doctype html>\n'); 
    res.write('<title>404 Not Found</title>\n'); 
    res.write('<h1>Not Found</h1>'); 
    res.write(
    '<p>The requested URL ' + 
    escapeHtml(path) + 
    ' was not found on this server.</p>' 
); 
    res.end(); 
    util.puts('404 Not Found: ' + path); 
}; 

StaticServlet.prototype.sendForbidden_ = function(req, res, path) { 
    path = path.substring(1); 
    res.writeHead(403, { 
     'Content-Type': 'text/html' 
    }); 
    res.write('<!doctype html>\n'); 
    res.write('<title>403 Forbidden</title>\n'); 
    res.write('<h1>Forbidden</h1>'); 
    res.write(
    '<p>You do not have permission to access ' + 
    escapeHtml(path) + ' on this server.</p>' 
); 
    res.end(); 
    util.puts('403 Forbidden: ' + path); 
}; 

StaticServlet.prototype.sendRedirect_ = function(req, res, redirectUrl) { 
    res.writeHead(301, { 
     'Content-Type': 'text/html', 
     'Location': redirectUrl 
    }); 
    res.write('<!doctype html>\n'); 
    res.write('<title>301 Moved Permanently</title>\n'); 
    res.write('<h1>Moved Permanently</h1>'); 
    res.write(
    '<p>The document has moved <a href="' + 
    redirectUrl + 
    '">here</a>.</p>' 
); 
    res.end(); 
    util.puts('301 Moved Permanently: ' + redirectUrl); 
}; 

StaticServlet.prototype.sendFile_ = function(req, res, path) { 
    var self = this; 
    var file = fs.createReadStream(path); 
    res.writeHead(200, { 
    'Content-Type': StaticServlet. 
     MimeMap[path.split('.').pop()] || 'text/plain' 
    }); 
    if (req.method === 'HEAD') { 
    res.end(); 
    } else { 
    file.on('data', res.write.bind(res)); 
    file.on('close', function() { 
     res.end(); 
    }); 
    file.on('error', function(error) { 
     self.sendError_(req, res, error); 
    }); 
    } 
}; 

StaticServlet.prototype.sendDirectory_ = function(req, res, path) { 
    var self = this; 
    if (path.match(/[^\/]$/)) { 
    req.url.pathname += '/'; 
    var redirectUrl = url.format(url.parse(url.format(req.url))); 
    return self.sendRedirect_(req, res, redirectUrl); 
    } 
    fs.readdir(path, function(err, files) { 
    if (err) 
     return self.sendError_(req, res, error); 

    if (!files.length) 
     return self.writeDirectoryIndex_(req, res, path, []); 

    var remaining = files.length; 
    files.forEach(function(fileName, index) { 
     fs.stat(path + '/' + fileName, function(err, stat) { 
     if (err) 
      return self.sendError_(req, res, err); 
     if (stat.isDirectory()) { 
      files[index] = fileName + '/'; 
     } 
     if (!(--remaining)) 
      return self.writeDirectoryIndex_(req, res, path, files); 
     }); 
    }); 
    }); 
}; 

StaticServlet.prototype.writeDirectoryIndex_ = function(req, res, path, files) { 
    path = path.substring(1); 
    res.writeHead(200, { 
    'Content-Type': 'text/html' 
    }); 
    if (req.method === 'HEAD') { 
    res.end(); 
    return; 
    } 
    res.write('<!doctype html>\n'); 
    res.write('<title>' + escapeHtml(path) + '</title>\n'); 
    res.write('<style>\n'); 
    res.write(' ol { list-style-type: none; font-size: 1.2em; }\n'); 
    res.write('</style>\n'); 
    res.write('<h1>Directory: ' + escapeHtml(path) + '</h1>'); 
    res.write('<ol>'); 
    files.forEach(function(fileName) { 
    if (fileName.charAt(0) !== '.') { 
     res.write('<li><a href="' + 
     escapeHtml(fileName) + '">' + 
     escapeHtml(fileName) + '</a></li>'); 
    } 
    }); 
    res.write('</ol>'); 
    res.end(); 
}; 

// Must be last, 
main(process.argv); 

Hãy giúp tôi trong việc này. Cảm ơn trước sự giúp đỡ nào.

+1

bạn có thể hiển thị nội dung của tệp webserver.js không? –

+0

@Jayram đã thêm tệp web-server.js –

+0

Bạn đã sao chép một phần mã từ một nơi nào đó? Có lẽ hệ thống mã hóa khác nhau. Cố gắng đảm bảo các dấu ngoặc kép đều giống nhau. – JofryHS

Trả lời

4

Nó được giải thích trên trang GitHub góc hạt giống, chỉ cần cuộn một chút.

Cài đặt Node.js, mở cmd và chạy node scripts/web-server.js

Sau đó điều hướng trình duyệt của bạn để http://localhost:<port>/app/index.html để xem các ứng dụng đang chạy trong trình duyệt của bạn.

Nguồn: https://github.com/angular/angular-seed#how-to-use-angular-seed

Các vấn đề liên quan