dotos 9 年之前
當前提交
5413545fa0
共有 12 個文件被更改,包括 297 次插入0 次删除
  1. 3 0
      .gitignore
  2. 66 0
      app.js
  3. 90 0
      bin/www
  4. 35 0
      package.json
  5. 8 0
      public/css/style.css
  6. 21 0
      routes/home.js
  7. 9 0
      routes/index.js
  8. 9 0
      routes/users.js
  9. 38 0
      routes/v1.js
  10. 6 0
      views/error.jade
  11. 5 0
      views/index.jade
  12. 7 0
      views/layout.jade

+ 3 - 0
.gitignore

@@ -0,0 +1,3 @@
+.DS_Store
+node_modules/
+npm-debug.log

+ 66 - 0
app.js

@@ -0,0 +1,66 @@
+var express = require('express');
+var path = require('path');
+var favicon = require('serve-favicon');
+var logger = require('morgan');
+var cookieParser = require('cookie-parser');
+var bodyParser = require('body-parser');
+
+var routes = require('./routes/index');
+var users = require('./routes/users');
+//HOME PAGE
+var home = require('./routes/home');
+//version 1.0
+var v1 = require('./routes/v1');
+
+var app = express();
+
+// view engine setup
+app.set('views', path.join(__dirname, 'views'));
+app.set('view engine', 'jade');
+
+// uncomment after placing your favicon in /public
+//app.use(favicon(path.join(__dirname, 'public', 'favicon.ico')));
+app.use(logger('dev'));
+app.use(bodyParser.json());
+app.use(bodyParser.urlencoded({ extended: false }));
+app.use(cookieParser());
+app.use(express.static(path.join(__dirname, 'public')));
+
+
+app.use('/', home);
+
+app.use('/v1',v1);
+
+// catch 404 and forward to error handler
+app.use(function(req, res, next) {
+  var err = new Error('Not Found');
+  err.status = 404;
+  next(err);
+});
+
+// error handlers
+
+// development error handler
+// will print stacktrace
+if (app.get('env') === 'development') {
+  app.use(function(err, req, res, next) {
+    res.status(err.status || 500);
+    res.render('error', {
+      message: err.message,
+      error: err
+    });
+  });
+}
+
+// production error handler
+// no stacktraces leaked to user
+app.use(function(err, req, res, next) {
+  res.status(err.status || 500);
+  res.render('error', {
+    message: err.message,
+    error: {}
+  });
+});
+
+
+module.exports = app;

+ 90 - 0
bin/www

@@ -0,0 +1,90 @@
+#!/usr/bin/env node
+
+/**
+ * Module dependencies.
+ */
+
+var app = require('../app');
+var debug = require('debug')('API:server');
+var http = require('http');
+
+/**
+ * Get port from environment and store in Express.
+ */
+
+var port = normalizePort(process.env.PORT || '3000');
+app.set('port', port);
+
+/**
+ * Create HTTP server.
+ */
+
+var server = http.createServer(app);
+
+/**
+ * Listen on provided port, on all network interfaces.
+ */
+
+server.listen(port);
+server.on('error', onError);
+server.on('listening', onListening);
+
+/**
+ * Normalize a port into a number, string, or false.
+ */
+
+function normalizePort(val) {
+  var port = parseInt(val, 10);
+
+  if (isNaN(port)) {
+    // named pipe
+    return val;
+  }
+
+  if (port >= 0) {
+    // port number
+    return port;
+  }
+
+  return false;
+}
+
+/**
+ * Event listener for HTTP server "error" event.
+ */
+
+function onError(error) {
+  if (error.syscall !== 'listen') {
+    throw error;
+  }
+
+  var bind = typeof port === 'string'
+    ? 'Pipe ' + port
+    : 'Port ' + port;
+
+  // handle specific listen errors with friendly messages
+  switch (error.code) {
+    case 'EACCES':
+      console.error(bind + ' requires elevated privileges');
+      process.exit(1);
+      break;
+    case 'EADDRINUSE':
+      console.error(bind + ' is already in use');
+      process.exit(1);
+      break;
+    default:
+      throw error;
+  }
+}
+
+/**
+ * Event listener for HTTP server "listening" event.
+ */
+
+function onListening() {
+  var addr = server.address();
+  var bind = typeof addr === 'string'
+    ? 'pipe ' + addr
+    : 'port ' + addr.port;
+  debug('Listening on ' + bind);
+}

+ 35 - 0
package.json

@@ -0,0 +1,35 @@
+{
+  "name": "API",
+  "version": "1.0.0",
+  "private": true,
+  "scripts": {
+    "start": "node ./bin/www",
+    "dev": "hotnode ./bin/www"
+  },
+  "repository": {
+    "type": "git",
+    "url": "git+https://github.com/xCss/api.git"
+  },
+  "keywords": [
+    "api"
+  ],
+  "author": "xCss",
+  "license": "ISC",
+  "bugs": {
+    "url": "https://github.com/xCss/api/issues"
+  },
+  "readme": "./readme.md",
+  "homepage": "https://github.com/xCss/api#readme",
+  "dependencies": {
+    "body-parser": "~1.15.1",
+    "cookie-parser": "~1.4.3",
+    "debug": "~2.2.0",
+    "express": "~4.13.4",
+    "express-generator": "^4.13.4",
+    "hotnode": "0.0.8",
+    "jade": "~1.11.0",
+    "morgan": "~1.7.0",
+    "request": "^2.74.0",
+    "serve-favicon": "~2.3.0"
+  }
+}

+ 8 - 0
public/css/style.css

@@ -0,0 +1,8 @@
+body {
+  padding: 50px;
+  font: 14px "Lucida Grande", Helvetica, Arial, sans-serif;
+}
+
+a {
+  color: #00B7FF;
+}

+ 21 - 0
routes/home.js

@@ -0,0 +1,21 @@
+var express = require('express');
+var router = express.Router();
+
+/* GET home page. */
+router.get('/', function(req, res, next) {
+    res.header("Access-Control-Allow-Origin", "*");  
+    res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");  
+    res.header("Access-Control-Allow-Methods","PUT,POST,GET,DELETE,OPTIONS");  
+    res.header("X-Powered-By",'3.2.1');
+    res.header("Vary","Origin");
+    res.header("Content-Type", "application/json;charset=utf-8");  
+    return res.send({
+        code:200,
+        home:'https://ioliu.cn',
+        versions:{
+            v1:'https://api.ioliu.cn/v1/'
+        }
+    });
+});
+
+module.exports = router;

+ 9 - 0
routes/index.js

@@ -0,0 +1,9 @@
+var express = require('express');
+var router = express.Router();
+
+/* GET home page. */
+router.get('/', function(req, res, next) {
+  res.render('index', { title: 'Express' });
+});
+
+module.exports = router;

+ 9 - 0
routes/users.js

@@ -0,0 +1,9 @@
+var express = require('express');
+var router = express.Router();
+
+/* GET users listing. */
+router.get('/', function(req, res, next) {
+  res.send('respond with a resource');
+});
+
+module.exports = router;

+ 38 - 0
routes/v1.js

@@ -0,0 +1,38 @@
+var express = require('express');
+var request = require('request');
+var router = express.Router();
+router.all('*', function(req, res, next) {
+    res.header("Access-Control-Allow-Origin", "*");  
+    res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");  
+    res.header("Access-Control-Allow-Methods","PUT,POST,GET,DELETE,OPTIONS");  
+    res.header("X-Powered-By",'3.2.1');
+    res.header("Vary","Origin");
+    res.header("Content-Type", "application/json;charset=utf-8");  
+    next();
+});
+router.get('/',function(req, res, next){
+    if(req.originalUrl == /v1/){
+        return res.send({
+            info:'please set params like this: https://api.ioliu.cn/v1?url=http[s]://YourWantProxyUrl.com'
+        });
+    }
+    var url = req.originalUrl.replace('/v1/?url=','');
+    console.log(url);
+    getJSON(url,function(data){
+        return res.send(data);
+    })
+    //return res.send({url:url});
+});
+
+function getJSON(url,callback,next){
+    request(url,function(err,res,body){
+        if(!err && res.statusCode == 200){
+            callback&&callback(body);
+        }else{
+            console.log(err);
+        }
+    });
+}
+
+
+module.exports = router;

+ 6 - 0
views/error.jade

@@ -0,0 +1,6 @@
+extends layout
+
+block content
+  h1= message
+  h2= error.status
+  pre #{error.stack}

+ 5 - 0
views/index.jade

@@ -0,0 +1,5 @@
+extends layout
+
+block content
+  h1= title
+  p Welcome to #{title}

+ 7 - 0
views/layout.jade

@@ -0,0 +1,7 @@
+doctype html
+html
+  head
+    title= title
+    link(rel='stylesheet', href='/stylesheets/style.css')
+  body
+    block content