Skip to content

Commit 14cec8e

Browse files
committedFeb 28, 2019
koa-generator
1 parent 6c59bf0 commit 14cec8e

File tree

18 files changed

+466
-1
lines changed

18 files changed

+466
-1
lines changed
 

‎.gitignore

+21
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
.DS_Store
2+
node_modules
3+
/dist
4+
5+
# local env files
6+
.env.local
7+
.env.*.local
8+
9+
# Log files
10+
npm-debug.log*
11+
yarn-debug.log*
12+
yarn-error.log*
13+
14+
# Editor directories and files
15+
.idea
16+
.vscode
17+
*.suo
18+
*.ntvs*
19+
*.njsproj
20+
*.sln
21+
*.sw*

‎README.md

+28-1
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,29 @@
11
# meituan
2-
vue全家桶、SSR、koa2
2+
3+
## Project setup
4+
```
5+
npm install
6+
```
7+
8+
### Compiles and hot-reloads for development
9+
```
10+
npm run serve
11+
```
12+
13+
### Compiles and minifies for production
14+
```
15+
npm run build
16+
```
17+
18+
### Run your tests
19+
```
20+
npm run test
21+
```
22+
23+
### Lints and fixes files
24+
```
25+
npm run lint
26+
```
27+
28+
### Customize configuration
29+
See [Configuration Reference](https://cli.vuejs.org/config/).

‎babel.config.js

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
module.exports = {
2+
presets: [
3+
'@vue/app'
4+
]
5+
}

‎koa2-learn/app.js

+44
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
const Koa = require('koa')
2+
const app = new Koa()
3+
const views = require('koa-views')
4+
const json = require('koa-json')
5+
const onerror = require('koa-onerror')
6+
const bodyparser = require('koa-bodyparser')
7+
const logger = require('koa-logger')
8+
9+
const index = require('./routes/index')
10+
const users = require('./routes/users')
11+
12+
// error handler
13+
onerror(app)
14+
15+
// middlewares
16+
app.use(bodyparser({
17+
enableTypes:['json', 'form', 'text']
18+
}))
19+
app.use(json())
20+
app.use(logger())
21+
app.use(require('koa-static')(__dirname + '/public'))
22+
23+
app.use(views(__dirname + '/views', {
24+
extension: 'ejs'
25+
}))
26+
27+
// logger
28+
app.use(async (ctx, next) => {
29+
const start = new Date()
30+
await next()
31+
const ms = new Date() - start
32+
console.log(`${ctx.method} ${ctx.url} - ${ms}ms`)
33+
})
34+
35+
// routes
36+
app.use(index.routes(), index.allowedMethods())
37+
app.use(users.routes(), users.allowedMethods())
38+
39+
// error-handling
40+
app.on('error', (err, ctx) => {
41+
console.error('server error', err, ctx)
42+
});
43+
44+
module.exports = app

‎koa2-learn/bin/www

+90
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
#!/usr/bin/env node
2+
3+
/**
4+
* Module dependencies.
5+
*/
6+
7+
var app = require('../app');
8+
var debug = require('debug')('demo:server');
9+
var http = require('http');
10+
11+
/**
12+
* Get port from environment and store in Express.
13+
*/
14+
15+
var port = normalizePort(process.env.PORT || '3000');
16+
// app.set('port', port);
17+
18+
/**
19+
* Create HTTP server.
20+
*/
21+
22+
var server = http.createServer(app.callback());
23+
24+
/**
25+
* Listen on provided port, on all network interfaces.
26+
*/
27+
28+
server.listen(port);
29+
server.on('error', onError);
30+
server.on('listening', onListening);
31+
32+
/**
33+
* Normalize a port into a number, string, or false.
34+
*/
35+
36+
function normalizePort(val) {
37+
var port = parseInt(val, 10);
38+
39+
if (isNaN(port)) {
40+
// named pipe
41+
return val;
42+
}
43+
44+
if (port >= 0) {
45+
// port number
46+
return port;
47+
}
48+
49+
return false;
50+
}
51+
52+
/**
53+
* Event listener for HTTP server "error" event.
54+
*/
55+
56+
function onError(error) {
57+
if (error.syscall !== 'listen') {
58+
throw error;
59+
}
60+
61+
var bind = typeof port === 'string'
62+
? 'Pipe ' + port
63+
: 'Port ' + port;
64+
65+
// handle specific listen errors with friendly messages
66+
switch (error.code) {
67+
case 'EACCES':
68+
console.error(bind + ' requires elevated privileges');
69+
process.exit(1);
70+
break;
71+
case 'EADDRINUSE':
72+
console.error(bind + ' is already in use');
73+
process.exit(1);
74+
break;
75+
default:
76+
throw error;
77+
}
78+
}
79+
80+
/**
81+
* Event listener for HTTP server "listening" event.
82+
*/
83+
84+
function onListening() {
85+
var addr = server.address();
86+
var bind = typeof addr === 'string'
87+
? 'pipe ' + addr
88+
: 'port ' + addr.port;
89+
debug('Listening on ' + bind);
90+
}

‎koa2-learn/package.json

+27
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
{
2+
"name": "koa2-learn",
3+
"version": "0.1.0",
4+
"private": true,
5+
"scripts": {
6+
"start": "node bin/www",
7+
"dev": "./node_modules/.bin/nodemon bin/www",
8+
"prd": "pm2 start bin/www",
9+
"test": "echo \"Error: no test specified\" && exit 1"
10+
},
11+
"dependencies": {
12+
"debug": "^2.6.3",
13+
"ejs": "~2.3.3",
14+
"koa": "^2.2.0",
15+
"koa-bodyparser": "^3.2.0",
16+
"koa-convert": "^1.2.0",
17+
"koa-json": "^2.0.2",
18+
"koa-logger": "^2.0.1",
19+
"koa-onerror": "^1.2.1",
20+
"koa-router": "^7.1.1",
21+
"koa-static": "^3.0.0",
22+
"koa-views": "^5.2.1"
23+
},
24+
"devDependencies": {
25+
"nodemon": "^1.8.1"
26+
}
27+
}
+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
body {
2+
padding: 50px;
3+
font: 14px "Lucida Grande", Helvetica, Arial, sans-serif;
4+
}
5+
6+
a {
7+
color: #00B7FF;
8+
}

‎koa2-learn/routes/index.js

+59
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
const router = require('koa-router')()
2+
3+
router.get('/', async (ctx, next) => {
4+
// node 中的全局对象是 global
5+
global.console.log('index2')
6+
7+
// 1.什么时候能用await?
8+
// await 的外层函数必须是一个async函数
9+
// 声明了 async函数,里面可以没有 await
10+
await ctx.render('index', {
11+
title: 'Hello Koa 2!'
12+
})
13+
})
14+
15+
router.get('/string', async (ctx, next) => {
16+
ctx.body = 'koa2 string'
17+
})
18+
19+
router.get('/json', async (ctx, next) => {
20+
ctx.body = {
21+
title: 'koa2 json'
22+
}
23+
})
24+
25+
router.get('/testAsync', async(ctx) =>{
26+
global.console.log('start', new Date().getTime())
27+
28+
// 2.await 后面跟什么?
29+
// await 后面跟的是一个 Promise对象(如果不是,也会自动转为Promise对象)
30+
31+
// 3. await 结果到来之前,代码不会向下运行
32+
// 4. 变量a的结果就是 resolve()返回的值 ab---->即 Promise对象的值,就是resolve()的参数
33+
const a = await new Promise((resolve, reject) => {
34+
setTimeout(function () {
35+
global.console.log('async a', new Date().getTime())
36+
resolve('ab')
37+
},1000)
38+
})
39+
40+
// 下面的代码,在 第一个 await 结果到来之前,不会运行
41+
const b = await 12
42+
43+
// const b = await Promise.resolve(12)
44+
45+
const c = await new Promise((resolve, reject) => {
46+
setTimeout(function () {
47+
global.console.log('async c', new Date().getTime())
48+
resolve('abc')
49+
},2000)
50+
})
51+
// 5. 当有多个 await时,代码会依次向下执行
52+
ctx.body = {
53+
a, // ab
54+
b, // 12
55+
c // abc
56+
}
57+
})
58+
59+
module.exports = router

‎koa2-learn/routes/users.js

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
const router = require('koa-router')()
2+
3+
router.prefix('/users')
4+
5+
router.get('/', function (ctx, next) {
6+
ctx.body = 'this is a users response!'
7+
})
8+
9+
router.get('/bar', function (ctx, next) {
10+
ctx.body = 'this is a users/bar response'
11+
})
12+
13+
module.exports = router

‎koa2-learn/views/error.ejs

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
<h1><%= message %></h1>
2+
<h2><%= error.status %></h2>
3+
<pre><%= error.stack %></pre>

‎koa2-learn/views/index.ejs

+11
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
<!DOCTYPE html>
2+
<html>
3+
<head>
4+
<title><%= title %></title>
5+
<link rel='stylesheet' href='/stylesheets/style.css' />
6+
</head>
7+
<body>
8+
<h1><%= title %></h1>
9+
<p>EJS Welcome to <%= title %></p>
10+
</body>
11+
</html>

‎package.json

+46
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
{
2+
"name": "meituan",
3+
"version": "0.1.0",
4+
"private": true,
5+
"scripts": {
6+
"serve": "vue-cli-service serve",
7+
"build": "vue-cli-service build",
8+
"lint": "vue-cli-service lint"
9+
},
10+
"dependencies": {
11+
"vue": "^2.6.6"
12+
},
13+
"devDependencies": {
14+
"@vue/cli-plugin-babel": "^3.4.0",
15+
"@vue/cli-plugin-eslint": "^3.4.0",
16+
"@vue/cli-service": "^3.4.0",
17+
"babel-eslint": "^10.0.1",
18+
"eslint": "^5.8.0",
19+
"eslint-plugin-vue": "^5.0.0",
20+
"vue-template-compiler": "^2.5.21"
21+
},
22+
"eslintConfig": {
23+
"root": true,
24+
"env": {
25+
"node": true
26+
},
27+
"extends": [
28+
"plugin:vue/essential",
29+
"eslint:recommended"
30+
],
31+
"rules": {},
32+
"parserOptions": {
33+
"parser": "babel-eslint"
34+
}
35+
},
36+
"postcss": {
37+
"plugins": {
38+
"autoprefixer": {}
39+
}
40+
},
41+
"browserslist": [
42+
"> 1%",
43+
"last 2 versions",
44+
"not ie <= 8"
45+
]
46+
}

‎public/favicon.ico

1.12 KB
Binary file not shown.

‎public/index.html

+17
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
<!DOCTYPE html>
2+
<html lang="en">
3+
<head>
4+
<meta charset="utf-8">
5+
<meta http-equiv="X-UA-Compatible" content="IE=edge">
6+
<meta name="viewport" content="width=device-width,initial-scale=1.0">
7+
<link rel="icon" href="<%= BASE_URL %>favicon.ico">
8+
<title>meituan</title>
9+
</head>
10+
<body>
11+
<noscript>
12+
<strong>We're sorry but meituan doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
13+
</noscript>
14+
<div id="app"></div>
15+
<!-- built files will be auto injected -->
16+
</body>
17+
</html>

‎src/App.vue

+28
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
<template>
2+
<div id="app">
3+
<img alt="Vue logo" src="./assets/logo.png">
4+
<HelloWorld msg="helloworld"/>
5+
</div>
6+
</template>
7+
8+
<script>
9+
import HelloWorld from './components/HelloWorld.vue'
10+
11+
export default {
12+
name: 'app',
13+
components: {
14+
HelloWorld
15+
}
16+
}
17+
</script>
18+
19+
<style>
20+
#app {
21+
font-family: 'Avenir', Helvetica, Arial, sans-serif;
22+
-webkit-font-smoothing: antialiased;
23+
-moz-osx-font-smoothing: grayscale;
24+
text-align: center;
25+
color: #2c3e50;
26+
margin-top: 60px;
27+
}
28+
</style>

‎src/assets/logo.png

6.69 KB
Loading

‎src/components/HelloWorld.vue

+58
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
<template>
2+
<div class="hello">
3+
<h1>{{ msg }}</h1>
4+
<p>
5+
For a guide and recipes on how to configure / customize this project,<br>
6+
check out the
7+
<a href="https://cli.vuejs.org" target="_blank" rel="noopener">vue-cli documentation</a>.
8+
</p>
9+
<h3>Installed CLI Plugins</h3>
10+
<ul>
11+
<li><a href="https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-babel" target="_blank" rel="noopener">babel</a></li>
12+
<li><a href="https://github.com/vuejs/vue-cli/tree/dev/packages/%40vue/cli-plugin-eslint" target="_blank" rel="noopener">eslint</a></li>
13+
</ul>
14+
<h3>Essential Links</h3>
15+
<ul>
16+
<li><a href="https://vuejs.org" target="_blank" rel="noopener">Core Docs</a></li>
17+
<li><a href="https://forum.vuejs.org" target="_blank" rel="noopener">Forum</a></li>
18+
<li><a href="https://chat.vuejs.org" target="_blank" rel="noopener">Community Chat</a></li>
19+
<li><a href="https://twitter.com/vuejs" target="_blank" rel="noopener">Twitter</a></li>
20+
<li><a href="https://news.vuejs.org" target="_blank" rel="noopener">News</a></li>
21+
</ul>
22+
<h3>Ecosystem</h3>
23+
<ul>
24+
<li><a href="https://router.vuejs.org" target="_blank" rel="noopener">vue-router</a></li>
25+
<li><a href="https://vuex.vuejs.org" target="_blank" rel="noopener">vuex</a></li>
26+
<li><a href="https://github.com/vuejs/vue-devtools#vue-devtools" target="_blank" rel="noopener">vue-devtools</a></li>
27+
<li><a href="https://vue-loader.vuejs.org" target="_blank" rel="noopener">vue-loader</a></li>
28+
<li><a href="https://github.com/vuejs/awesome-vue" target="_blank" rel="noopener">awesome-vue</a></li>
29+
</ul>
30+
</div>
31+
</template>
32+
33+
<script>
34+
export default {
35+
name: 'HelloWorld',
36+
props: {
37+
msg: String
38+
}
39+
}
40+
</script>
41+
42+
<!-- Add "scoped" attribute to limit CSS to this component only -->
43+
<style scoped>
44+
h3 {
45+
margin: 40px 0 0;
46+
}
47+
ul {
48+
list-style-type: none;
49+
padding: 0;
50+
}
51+
li {
52+
display: inline-block;
53+
margin: 0 10px;
54+
}
55+
a {
56+
color: #42b983;
57+
}
58+
</style>

‎src/main.js

+8
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
import Vue from 'vue'
2+
import App from './App.vue'
3+
4+
Vue.config.productionTip = false
5+
6+
new Vue({
7+
render: h => h(App),
8+
}).$mount('#app')

0 commit comments

Comments
 (0)
Please sign in to comment.