{"id":12970,"date":"2016-12-22T09:00:39","date_gmt":"2016-12-22T00:00:39","guid":{"rendered":"http:\/\/www.techscore.com\/blog\/?p=12970"},"modified":"2018-11-14T16:33:43","modified_gmt":"2018-11-14T07:33:43","slug":"angular2%e3%81%a7%e3%81%95%e3%81%8f%e3%81%a3%e3%81%a8mean%e3%82%b9%e3%82%bf%e3%83%83%e3%82%af%e3%82%92%e3%81%af%e3%81%98%e3%82%81%e3%81%a6%e3%81%bf%e3%82%8b","status":"publish","type":"post","link":"https:\/\/www.techscore.com\/blog\/2016\/12\/22\/angular2%e3%81%a7%e3%81%95%e3%81%8f%e3%81%a3%e3%81%a8mean%e3%82%b9%e3%82%bf%e3%83%83%e3%82%af%e3%82%92%e3%81%af%e3%81%98%e3%82%81%e3%81%a6%e3%81%bf%e3%82%8b\/","title":{"rendered":"Angular2\u3067\u3055\u304f\u3063\u3068MEAN\u30b9\u30bf\u30c3\u30af\u3092\u306f\u3058\u3081\u3066\u307f\u308b"},"content":{"rendered":"
\u3053\u3093\u306b\u3061\u306f\u3001\u5e73\u5965\u3067\u3059\uff01 \u5f0a\u793e\u30b5\u30fc\u30d3\u30b9 Synergy!<\/a> \u306f\u3001 AngularJS \u3067\u5b9f\u88c5\u3055\u308c\u3066\u3044\u307e\u3059\u3002 AngularJS \u306f\u3054\u5b58\u77e5\u306e\u65b9\u3082\u591a\u3044\u3068\u306f\u601d\u3044\u307e\u3059\u304c\u3001\u5f8c\u7d99\u30d0\u30fc\u30b8\u30e7\u30f3\u306e Angular2 \u304c\u767b\u5834\u3057\u307e\u3057\u305f\u3002 Angular2 \u306f AngularJS \u306e\u554f\u984c\u70b9\u304c\u6574\u7406\u3055\u308c\u307e\u3057\u305f\u3002\u305d\u306e\u7d50\u679c\u3001\u4f7f\u3044\u3084\u3059\u304f\u3001\u305d\u3057\u3066\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3082\u3082\u306e\u3059\u3054\u304f\u6539\u5584\u3055\u308c\u3066\u3044\u307e\u3059\u3002<\/p>\n \u3057\u304b\u3057\u554f\u984c\u70b9\u3082\u3042\u308a\u307e\u3059\u3002 AngularJS \u3068\u306e\u4e92\u63db\u6027\u304c\u3042\u308a\u307e\u305b\u3093\u3002<\/p>\n \u305d\u306e\u305f\u3081 Angular2 \u3092\u52d5\u4f5c\u3055\u305b\u308b\u306b\u306f\u4eca\u307e\u3067\u4f7f\u7528\u3057\u3066\u3044\u305f AngularJS \u306e\u74b0\u5883\u3092\u4f7f\u3046\u3053\u3068\u306f\u3067\u304d\u305a\u3001\u65b0\u305f\u306b\u52d5\u4f5c\u3055\u305b\u308b\u74b0\u5883\u3092\u7528\u610f\u3057\u306a\u3044\u3068\u3044\u3051\u307e\u305b\u3093\u3002<\/p>\n Plnkr<\/a> \u306a\u3069\u3092\u4f7f\u3048\u3070\u7c21\u5358\u306b Angular2 \u306e\u691c\u8a3c\u306f\u3067\u304d\u308b\u306e\u3067\u3059\u304c\u3001\u305b\u3063\u304b\u304f\u306a\u3089 Angular2 \u306e MEAN \u30b9\u30bf\u30c3\u30af\u3092\u7528\u610f\u3057\u3066\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u3084\u30c7\u30fc\u30bf\u30d9\u30fc\u30b9\u3082\u7528\u610f\u3057\u3066\u3044\u308d\u3044\u308d\u904a\u3093\u3067\u307f\u3088\u3046\u3068\u601d\u3044\u3001Angular2 \u3067 MEAN \u30b9\u30bf\u30c3\u30af\u3092\u4f5c\u3063\u3066\u307f\u307e\u3057\u305f\u3002<\/p>\n \u305d\u3053\u3067\u5b66\u3093\u3060\u3053\u3068\u3092\u3001\u8981\u70b9\u3092\u307e\u3068\u3081\u3066\u66f8\u3044\u3066\u307f\u3088\u3046\u3068\u601d\u3044\u307e\u3059\u3002<\/p>\n MEAN \u30b9\u30bf\u30c3\u30af\u306f Web \u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u958b\u767a\u3092\u7c21\u7d20\u5316\u3057\u3001\u9ad8\u901f\u5316\u3059\u308b\u30d5\u30eb\u30b9\u30bf\u30c3\u30af\u306e JavaScript \u306e\u30d5\u30ec\u30fc\u30e0\u30ef\u30fc\u30af\u3067\u3059\u3002 MongoDB \u3001Express \u3001 AngularJS \u3001Node.js \u3092\u7d44\u307f\u5408\u308f\u305b\u308b\u3053\u3068\u306b\u3088\u3063\u3066 JavaScript \u3067\u30af\u30e9\u30a4\u30a2\u30f3\u30c8\u304b\u3089\u30b5\u30fc\u30d0\u307e\u3067\u958b\u767a\u3059\u308b\u3053\u3068\u304c\u3067\u304d\u308b\u74b0\u5883\u3067\u3059\u3002<\/p>\n \u305d\u308c\u305e\u308c\u306e\u30bd\u30d5\u30c8\u30a6\u30a7\u30a2\u306e\u7c21\u5358\u306a\u8aac\u660e\u306f\u4ee5\u4e0b\u3068\u306a\u308a\u307e\u3059\u3002<\/p>\n <\/p>\n <\/p>\n <\/p>\n \u4eca\u56de\u306f\u30bf\u30a4\u30c8\u30eb\u306b\u3042\u308b\u901a\u308a\u3001AngularJS \u3092\u4f7f\u3046\u306e\u3067\u306f\u306a\u304f\u3001Angular2 \u3092\u4f7f\u7528\u3059\u308b MEAN \u30b9\u30bf\u30c3\u30af\u3092\u4f5c\u6210\u3057\u305f\u3044\u3068\u601d\u3044\u307e\u3059\u3002<\/p>\n \u3072\u306a\u5f62\u3068\u3057\u3066\u4ee5\u4e0b\u306e\u3088\u3046\u306a\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u69cb\u6210\u306b\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n <\/p>\n <\/p>\n <\/p>\n <\/p>\n <\/p>\n \u4eca\u56de\u306f\u3001MEAN \u30b9\u30bf\u30c3\u30af\u3092\u7406\u89e3\u3067\u304d\u308b\u3088\u3046\u306b\u3001\u30e1\u30c3\u30bb\u30fc\u30b8\u3092 DB \u306b\u767b\u9332\u3057\u3066\u3001\u767b\u9332\u60c5\u5831\u3092\u4e00\u89a7\u8868\u793a\u3059\u308b\u30b5\u30f3\u30d7\u30eb\u30a2\u30d7\u30ea\u3092\u4f5c\u6210\u3057\u307e\u3059\u3002 \u30aa\u30d5\u30a3\u30b7\u30e3\u30eb\u30b5\u30a4\u30c8\u304b\u3089\u5b9f\u884c\u74b0\u5883\u306b\u9069\u3057\u305f\u30d0\u30fc\u30b8\u30e7\u30f3\u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u3066\u304f\u3060\u3055\u3044\u3002<\/p>\n MongoDB \u30aa\u30d5\u30a3\u30b7\u30e3\u30eb\u30b5\u30a4\u30c8: https:\/\/www.mongodb.com\/<\/a> \u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u304c\u3067\u304d\u305f\u3089\u3001\u6b21\u306f\u30d5\u30a1\u30a4\u30eb\u306e\u7de8\u96c6\u3092\u304a\u3053\u306a\u3063\u3066\u3044\u304d\u307e\u3059\u3002<\/p>\n MEAN \u30b9\u30bf\u30c3\u30af\u3067\u5fc5\u8981\u306a\u30e2\u30b8\u30e5\u30fc\u30eb\u306f npm \u3092\u4f7f\u7528\u3057\u3066\u53d6\u5f97\u3059\u308b\u3088\u3046\u306b\u3057\u3066\u3044\u307e\u3059\u3002\u305d\u306e\u305f\u3081 package.json \u306b\u5fc5\u8981\u306a\u30e2\u30b8\u30e5\u30fc\u30eb\u3092\u8a18\u8f09\u3057\u3066 npm \u3067\u53d6\u5f97\u3067\u304d\u308b\u3088\u3046\u306b\u3057\u3066\u3044\u307e\u3059\u3002 \u4eca\u56de\u306f\u30e2\u30b8\u30e5\u30fc\u30eb\u30d0\u30f3\u30c9\u30e9\u3067\u3042\u308b webpack \u3092\u4f7f\u3063\u3066\u3001\u30d5\u30ed\u30f3\u30c8\u306e\u30bd\u30fc\u30b9\u3092\u307e\u3068\u3081\u3066\u3044\u307e\u3059\u3002scripts \u30d7\u30ed\u30d1\u30c6\u30a3\u306b\u306f\u3001\u958b\u767a\u74b0\u5883\u306e\u30b5\u30fc\u30d0\u3092\u8d77\u52d5\u3059\u308b start \u3068 Angular2 \u306e TypeScript \u306e\u30bd\u30fc\u30b9\u3092\u30c8\u30e9\u30f3\u30b9\u30d1\u30a4\u30eb\u3057\u3066\u3001\u30d5\u30a1\u30a4\u30eb\u3092\u307e\u3068\u3081\u308b\u305f\u3081\u306e build \u30b9\u30af\u30ea\u30d7\u30c8\u30926\uff5e7\u884c\u76ee\u306b\u5b9a\u7fa9\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n webpack \u306e\u8a2d\u5b9a\u3067\u306f\u90e8\u5206\u7684\u306b\u629c\u7c8b\u3057\u3066\u53d6\u308a\u4e0a\u3052\u307e\u3059\u3002 \u4ed6\u306b\u3082 TypeScript \u3092\u30c8\u30e9\u30f3\u30b9\u30d1\u30a4\u30eb\u3059\u308b\u305f\u3081\u306e\u8a2d\u5b9a\u30d5\u30a1\u30a4\u30eb\u3067\u3042\u308b\u3001tsconfig.json \u306a\u3069\u3082\u3042\u308a\u307e\u3059\u304c\u3001\u7279\u306b\u91cd\u8981\u3067\u306f\u306a\u3044\u306e\u3067\u3001\u3053\u3053\u3067\u306f\u5272\u611b\u3055\u305b\u3066\u3044\u305f\u3060\u304d\u307e\u3059\u3002<\/p>\n Node.js \u306e\u30e1\u30a4\u30f3\u306e\u30d5\u30a1\u30a4\u30eb\u3067\u3059\u3002\u3053\u3053\u3067\u306f\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u3067\u4f7f\u7528\u3059\u308b\u5404\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u306e\u8a2d\u5b9a\u304c\u884c\u308f\u308c\u3066\u3044\u307e\u3059\u3002<\/p>\n 7\u884c\u76ee\u300113\u884c\u76ee\u304c mongoose \u306e\u8a2d\u5b9a\u3067\u3059\u3002\u3053\u3053\u3067\u306f\u3001\u63a5\u7d9a\u3059\u308b MongoDB \u306e\u8a2d\u5b9a\u3092\u884c\u3063\u3066\u3044\u307e\u3059\u3002<\/p>\n \u3067\u306fIP\u30a2\u30c9\u30ec\u30b9\uff1a\u30dd\u30fc\u30c8\u756a\u53f7\/ DB \u540d\u3092\u6307\u5b9a\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n \u305d\u308c\u4ee5\u5916\u306f\u307b\u3068\u3093\u3069 Express \u306e\u8a2d\u5b9a\u3067\u3059\u3002 \u3053\u306e\u30d5\u30a1\u30a4\u30eb\u306f Node.js \u3067\u30b5\u30fc\u30d0\u3092\u8d77\u52d5\u3059\u308b\u305f\u3081\u306e\u8a2d\u5b9a\u306a\u3069\u304c\u8a18\u8f09\u3055\u308c\u3066\u3044\u307e\u3059\u3002<\/p>\n 22\u884c\u76ee\u3067\u30b5\u30fc\u30d0\u3092\u8d77\u52d5\u3057\u3066\u3044\u307e\u3059\u3002 \u3053\u306e\u30d5\u30a1\u30a4\u30eb\u306f\u3001\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u5074\u304b\u3089\u30ec\u30b9\u30dd\u30f3\u30b9\u3068\u3057\u3066\u8fd4\u3055\u308c\u308b HTML \u30d5\u30a1\u30a4\u30eb\u3067\u3059\u3002
\n\u3053\u308c\u306f\u3001 TECHSCORE Advent Calendar 2016 TECHSCORE BLOG<\/a> \u306e22\u65e5\u76ee\u306e\u8a18\u4e8b\u3067\u3059\u3002<\/p>\n \u305d\u3082\u305d\u3082 MEAN \u30b9\u30bf\u30c3\u30af\u3068\u306f <\/h2>\n
\n
Anglar2 \u306e MEAN \u30b9\u30bf\u30c3\u30af\u306e\u3072\u306a\u5f62<\/h2>\n
\r\n|-- app.js\r\n|-- assets\r\n| `-- app\r\n| |-- app.component.html\r\n| |-- app.component.service.ts\r\n| |-- app.component.ts\r\n| |-- app.module.ts\r\n| |-- main.ts\r\n| `-- polyfills.ts\r\n|-- bin\r\n| `-- www\r\n|-- models\r\n| `-- message.js\r\n|-- node_modules\r\n|-- package.json\r\n|-- public\r\n|-- routes\r\n| |-- app.js\r\n| `-- message.js\r\n|-- tsconfig.json\r\n|-- views\r\n| `-- index.hbs\r\n|-- webpack.config.js\r\n<\/pre>\n
\u5404\u30c7\u30a3\u30ec\u30af\u30c8\u30ea\u306e\u8aac\u660e <\/h3>\n
\n
\u30b5\u30f3\u30d7\u30eb\u30a2\u30d7\u30ea\u306b\u3064\u3044\u3066 <\/h2>\n
\n\u307e\u305a MongoDB \u3068 mongoose \u3092\u30a4\u30f3\u30b9\u30c8\u30fc\u30eb\u3057\u307e\u3059\u3002<\/p>\n
\nmongoose \u30aa\u30d5\u30a3\u30b7\u30e3\u30eb\u30b5\u30a4\u30c8: http:\/\/mongoosejs.com\/<\/a><\/p>\n \u958b\u767a\u74b0\u5883\u3092\u69cb\u7bc9\u3059\u308b\u305f\u3081\u306e\u30d5\u30a1\u30a4\u30eb <\/h2>\n
package.json <\/h3>\n
\n\u30bd\u30fc\u30b9\u306f\u4ee5\u4e0b\u3068\u306a\u308a\u307e\u3059\u3002<\/p>\n\r\n{\r\n \"name\": \"techscore-nodejs-angular2\",\r\n \"version\": \"1.0.0\",\r\n \"private\": true,\r\n \"scripts\": {\r\n \"start\": \"node .\/bin\/www\",\r\n \"build\": \"del-cli public\/js\/app && webpack --config webpack.config.dev.js --progress --profile --watch\"\r\n },\r\n \"dependencies\": {\r\n \"@angular\/common\": \"2.0.1\",\r\n \"@angular\/compiler\": \"2.0.1\",\r\n \"@angular\/compiler-cli\": \"0.6.3\",\r\n \"@angular\/core\": \"2.0.1\",\r\n \"@angular\/forms\": \"2.0.1\",\r\n \"@angular\/http\": \"2.0.1\",\r\n \"@angular\/platform-browser\": \"2.0.1\",\r\n \"@angular\/platform-browser-dynamic\": \"2.0.1\",\r\n \"@angular\/platform-server\": \"2.0.1\",\r\n \"@angular\/router\": \"3.0.1\",\r\n \"@angular\/upgrade\": \"2.0.1\",\r\n \"body-parser\": \"~1.15.2\",\r\n \"cookie-parser\": \"~1.4.3\",\r\n \"core-js\": \"^2.4.1\",\r\n \"debug\": \"~2.2.0\",\r\n \"express\": \"~4.14.0\",\r\n \"hbs\": \"~3.1.0\",\r\n \"mongoose\": \"^4.7.1\",\r\n \"mongoose-unique-validator\": \"^1.0.3\",\r\n \"morgan\": \"~1.6.1\",\r\n \"reflect-metadata\": \"^0.1.3\",\r\n \"rxjs\": \"5.0.0-beta.12\",\r\n \"serve-favicon\": \"~2.3.0\",\r\n \"zone.js\": \"^0.6.23\"\r\n },\r\n \"devDependencies\": {\r\n \"@types\/core-js\": \"^0.9.34\",\r\n \"@types\/node\": \"^6.0.45\",\r\n \"angular2-router-loader\": \"^0.3.2\",\r\n \"angular2-template-loader\": \"^0.5.0\",\r\n \"awesome-typescript-loader\": \"^2.2.4\",\r\n \"del-cli\": \"^0.2.0\",\r\n \"html-loader\": \"^0.4.4\",\r\n \"raw-loader\": \"^0.5.1\",\r\n \"typescript\": \"^2.0.3\",\r\n \"webpack\": \"2.1.0-beta.21\",\r\n \"webpack-merge\": \"^0.14.1\"\r\n }\r\n}\r\n<\/pre>\n
webpack.config.js <\/h3>\n
\n\u307e\u305a\u3001Entry\u3067\u3059\u304c\u3001\u8d77\u70b9\u3068\u306a\u308b\u30e2\u30b8\u30e5\u30fc\u30eb\u3092 webpack \u306b\u8a2d\u5b9a\u3057\u307e\u3059\u3002\u3053\u3053\u3067\u306f\u3001Angular2 \u306e\u8d77\u52d5\u51e6\u7406\u304c\u8a18\u8f09\u3055\u308c\u3066\u3044\u308b main.ts \u3092\u6307\u5b9a\u3057\u3066\u3044\u307e\u3059\u3002
\n\u307e\u305f\u3001webpack \u304c\u51e6\u7406\u3057\u305f\u7d50\u679c\u3092\u51fa\u529b\u3059\u308b\u305f\u3081\u306e\u8a2d\u5b9a\u3067\u3042\u308b\u3001output \u3082\u8a2d\u5b9a\u3057\u3066\u3044\u307e\u3059\u3002\u3053\u3053\u3067\u51fa\u529b\u3057\u305f JavaScript \u306e\u30d5\u30a1\u30a4\u30eb\u3092\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u8d77\u52d5\u6642\u306b\u53c2\u7167\u3059\u308b\u3088\u3046\u306b\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n\r\n entry: {\r\n 'app': '.\/assets\/app\/main.ts'\r\n },\r\n<\/pre>\n
\r\n output: {\r\n path: '.\/public\/js\/app',\r\n publicPath: \"\/js\/app\/\",\r\n filename: 'bundle.js'\r\n }\r\n<\/pre>\n
\u30d0\u30c3\u30af\u30a8\u30f3\u30c9\u5074\u3092\u69cb\u6210\u3059\u308b\u30d5\u30a1\u30a4\u30eb <\/h2>\n
app.js <\/h3>\n
\r\nvar express = require('express');\r\nvar path = require('path');\r\nvar favicon = require('serve-favicon');\r\nvar logger = require('morgan');\r\nvar cookieParser = require('cookie-parser');\r\nvar bodyParser = require('body-parser');\r\nvar mongoose = require('mongoose');\r\n\r\nvar appRoutes = require('.\/routes\/app');\r\nvar messageRoutes = require('.\/routes\/message');\r\n\r\nvar app = express();\r\nmongoose.connect('mongodb:\/\/localhost:27017\/techscore');\r\n\r\n\/\/ view engine setup\r\napp.set('views', path.join(__dirname, 'views'));\r\napp.set('view engine', 'hbs');\r\n\r\n\/\/ uncomment after placing your favicon in \/public\r\n\/\/app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));\r\napp.use(logger('dev'));\r\napp.use(bodyParser.json());\r\napp.use(bodyParser.urlencoded({extended: false}));\r\napp.use(cookieParser());\r\napp.use(express.static(path.join(__dirname, 'public')));\r\n\r\napp.use(function (req, res, next) {\r\n res.setHeader('Access-Control-Allow-Origin', '*');\r\n res.setHeader('Access-Control-Allow-Headers', 'Origin, X-Requested-With, Content-Type, Accept');\r\n res.setHeader('Access-Control-Allow-Methods', 'POST, GET, PATCH, DELETE, OPTIONS');\r\n next();\r\n});\r\n\r\napp.use('\/', appRoutes);\r\napp.use('\/message', messageRoutes);\r\n\r\n\/\/ catch 404 and forward to error handler\r\napp.use(function (req, res, next) {\r\n return res.render('index');\r\n});\r\n\r\n\r\nmodule.exports = app;\r\n<\/pre>\n
\n\u30d8\u30c3\u30c0\u306e\u8a2d\u5b9a\u3084 view \u306e\u8a2d\u5b9a\u306a\u3069\u3092\u884c\u3063\u3066\u3044\u307e\u3059\u3002
\n9\uff5e10\u884c\u76ee\u300134\u884c\u76ee\uff5e35\u884c\u76ee\u306f\u30eb\u30fc\u30c6\u30a3\u30f3\u30b0\u306e\u8a2d\u5b9a\u3092\u884c\u3063\u3066\u3044\u307e\u3059\u3002<\/p>\n www \u30d5\u30a1\u30a4\u30eb<\/h3>\n
\r\n#!\/usr\/bin\/env node\r\n\r\n\/**\r\n * Module dependencies.\r\n *\/\r\n\r\nvar app = require('..\/app');\r\nvar debug = require('debug')('node-rest:server');\r\nvar http = require('http');\r\n\r\n\/**\r\n * Get port from environment and store in Express.\r\n *\/\r\n\r\nvar port = normalizePort(process.env.PORT || '3000');\r\napp.set('port', port);\r\n\r\n\/**\r\n * Create HTTP server.\r\n *\/\r\n\r\nvar server = http.createServer(app);\r\n\r\n\/**\r\n * Listen on provided port, on all network interfaces.\r\n *\/\r\n\r\nserver.listen(port);\r\nserver.on('error', onError);\r\nserver.on('listening', onListening);\r\n\r\n\/**\r\n * Normalize a port into a number, string, or false.\r\n *\/\r\n\r\nfunction normalizePort(val) {\r\n var port = parseInt(val, 10);\r\n\r\n if (isNaN(port)) {\r\n \/\/ named pipe\r\n return val;\r\n }\r\n\r\n if (port >= 0) {\r\n \/\/ port number\r\n return port;\r\n }\r\n\r\n return false;\r\n}\r\n\r\n\/**\r\n * Event listener for HTTP server \"error\" event.\r\n *\/\r\n\r\nfunction onError(error) {\r\n if (error.syscall !== 'listen') {\r\n throw error;\r\n }\r\n\r\n var bind = typeof port === 'string'\r\n ? 'Pipe ' + port\r\n : 'Port ' + port;\r\n\r\n \/\/ handle specific listen errors with friendly messages\r\n switch (error.code) {\r\n case 'EACCES':\r\n console.error(bind + ' requires elevated privileges');\r\n process.exit(1);\r\n break;\r\n case 'EADDRINUSE':\r\n console.error(bind + ' is already in use');\r\n process.exit(1);\r\n break;\r\n default:\r\n throw error;\r\n }\r\n}\r\n\r\n\/**\r\n * Event listener for HTTP server \"listening\" event.\r\n *\/\r\n\r\nfunction onListening() {\r\n var addr = server.address();\r\n var bind = typeof addr === 'string'\r\n ? 'pipe ' + addr\r\n : 'port ' + addr.port;\r\n debug('Listening on ' + bind);\r\n}\r\n<\/pre>\n
\n15\uff5e16\u884c\u76ee\u3067\u30dd\u30fc\u30c8\u3092\u6307\u5b9a\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n views\/index.hbs <\/h3>\n
\n\u3053\u306e HTML \u30d5\u30a1\u30a4\u30eb\u3067\u306f Angular2 \u306e\u521d\u671f\u306b\u8868\u793a\u3059\u308b\u5185\u5bb9\u304c\u5b9f\u88c5\u3055\u308c\u3066\u3044\u307e\u3059\u3002<\/p>\n\r\n\r\n\r\n\r\n