遇见
4 years ago
20 changed files with 618 additions and 288 deletions
@ -1,53 +0,0 @@
@@ -1,53 +0,0 @@
|
||||
import Mock from 'mockjs' |
||||
import { param2Obj } from '../src/utils' |
||||
|
||||
import user from './user' |
||||
import table from './table' |
||||
|
||||
const mocks = [ |
||||
...user, |
||||
...table |
||||
] |
||||
|
||||
// for front mock
|
||||
// please use it cautiously, it will redefine XMLHttpRequest,
|
||||
// which will cause many of your third-party libraries to be invalidated(like progress event).
|
||||
export function mockXHR() { |
||||
// mock patch
|
||||
// https://github.com/nuysoft/Mock/issues/300
|
||||
Mock.XHR.prototype.proxy_send = Mock.XHR.prototype.send |
||||
Mock.XHR.prototype.send = function() { |
||||
if (this.custom.xhr) { |
||||
this.custom.xhr.withCredentials = this.withCredentials || false |
||||
|
||||
if (this.responseType) { |
||||
this.custom.xhr.responseType = this.responseType |
||||
} |
||||
} |
||||
this.proxy_send(...arguments) |
||||
} |
||||
|
||||
function XHR2ExpressReqWrap(respond) { |
||||
return function(options) { |
||||
let result = null |
||||
if (respond instanceof Function) { |
||||
const { body, type, url } = options |
||||
// https://expressjs.com/en/4x/api.html#req
|
||||
result = respond({ |
||||
method: type, |
||||
body: JSON.parse(body), |
||||
query: param2Obj(url) |
||||
}) |
||||
} else { |
||||
result = respond |
||||
} |
||||
return Mock.mock(result) |
||||
} |
||||
} |
||||
|
||||
for (const i of mocks) { |
||||
Mock.mock(new RegExp(i.url), i.type || 'get', XHR2ExpressReqWrap(i.response)) |
||||
} |
||||
} |
||||
|
||||
export default mocks |
@ -1,84 +0,0 @@
@@ -1,84 +0,0 @@
|
||||
const chokidar = require('chokidar') |
||||
const bodyParser = require('body-parser') |
||||
const chalk = require('chalk') |
||||
const path = require('path') |
||||
const Mock = require('mockjs') |
||||
|
||||
const mockDir = path.join(process.cwd(), 'mock') |
||||
|
||||
function registerRoutes(app) { |
||||
let mockLastIndex |
||||
const { default: mocks } = require('./index.js') |
||||
const mocksForServer = mocks.map(route => { |
||||
return responseFake(route.url, route.type, route.response) |
||||
}) |
||||
for (const mock of mocksForServer) { |
||||
app[mock.type](mock.url, mock.response) |
||||
mockLastIndex = app._router.stack.length |
||||
} |
||||
const mockRoutesLength = Object.keys(mocksForServer).length |
||||
return { |
||||
mockRoutesLength: mockRoutesLength, |
||||
mockStartIndex: mockLastIndex - mockRoutesLength |
||||
} |
||||
} |
||||
|
||||
function unregisterRoutes() { |
||||
Object.keys(require.cache).forEach(i => { |
||||
if (i.includes(mockDir)) { |
||||
delete require.cache[require.resolve(i)] |
||||
} |
||||
}) |
||||
} |
||||
|
||||
// for mock server
|
||||
const responseFake = (url, type, respond) => { |
||||
return { |
||||
url: new RegExp(`${process.env.VUE_APP_BASE_API}${url}`), |
||||
type: type || 'get', |
||||
response(req, res) { |
||||
console.log('request invoke:' + req.path) |
||||
res.json(Mock.mock(respond instanceof Function ? respond(req, res) : respond)) |
||||
} |
||||
} |
||||
} |
||||
|
||||
module.exports = app => { |
||||
// es6 polyfill
|
||||
require('@babel/register') |
||||
|
||||
// parse app.body
|
||||
// https://expressjs.com/en/4x/api.html#req.body
|
||||
app.use(bodyParser.json()) |
||||
app.use(bodyParser.urlencoded({ |
||||
extended: true |
||||
})) |
||||
|
||||
const mockRoutes = registerRoutes(app) |
||||
var mockRoutesLength = mockRoutes.mockRoutesLength |
||||
var mockStartIndex = mockRoutes.mockStartIndex |
||||
|
||||
// watch files, hot reload mock server
|
||||
chokidar.watch(mockDir, { |
||||
ignored: /mock-server/, |
||||
ignoreInitial: true |
||||
}).on('all', (event, path) => { |
||||
if (event === 'change' || event === 'add') { |
||||
try { |
||||
// remove mock routes stack
|
||||
app._router.stack.splice(mockStartIndex, mockRoutesLength) |
||||
|
||||
// clear routes cache
|
||||
unregisterRoutes() |
||||
|
||||
const mockRoutes = registerRoutes(app) |
||||
mockRoutesLength = mockRoutes.mockRoutesLength |
||||
mockStartIndex = mockRoutes.mockStartIndex |
||||
|
||||
console.log(chalk.magentaBright(`\n > Mock Server hot reload success! changed ${path}`)) |
||||
} catch (error) { |
||||
console.log(chalk.redBright(error)) |
||||
} |
||||
} |
||||
}) |
||||
} |
@ -1,29 +0,0 @@
@@ -1,29 +0,0 @@
|
||||
import Mock from 'mockjs' |
||||
|
||||
const data = Mock.mock({ |
||||
'items|30': [{ |
||||
id: '@id', |
||||
title: '@sentence(10, 20)', |
||||
'status|1': ['published', 'draft', 'deleted'], |
||||
author: 'name', |
||||
display_time: '@datetime', |
||||
pageviews: '@integer(300, 5000)' |
||||
}] |
||||
}) |
||||
|
||||
export default [ |
||||
{ |
||||
url: '/vue-admin-template/table/list', |
||||
type: 'get', |
||||
response: config => { |
||||
const items = data.items |
||||
return { |
||||
code: 20000, |
||||
data: { |
||||
total: items.length, |
||||
items: items |
||||
} |
||||
} |
||||
} |
||||
} |
||||
] |
@ -1,84 +0,0 @@
@@ -1,84 +0,0 @@
|
||||
|
||||
const tokens = { |
||||
admin: { |
||||
token: 'admin-token' |
||||
}, |
||||
editor: { |
||||
token: 'editor-token' |
||||
} |
||||
} |
||||
|
||||
const users = { |
||||
'admin-token': { |
||||
roles: ['admin'], |
||||
introduction: 'I am a super administrator', |
||||
avatar: 'https://wpimg.wallstcn.com/f778738c-e4f8-4870-b634-56703b4acafe.gif', |
||||
name: 'Super Admin' |
||||
}, |
||||
'editor-token': { |
||||
roles: ['editor'], |
||||
introduction: 'I am an editor', |
||||
avatar: 'https://wpimg.wallstcn.com/f778738c-e4f8-4870-b634-56703b4acafe.gif', |
||||
name: 'Normal Editor' |
||||
} |
||||
} |
||||
|
||||
export default [ |
||||
// user login
|
||||
{ |
||||
url: '/vue-admin-template/user/login', |
||||
type: 'post', |
||||
response: config => { |
||||
const { username } = config.body |
||||
const token = tokens[username] |
||||
|
||||
// mock error
|
||||
if (!token) { |
||||
return { |
||||
code: 60204, |
||||
message: 'Account and password are incorrect.' |
||||
} |
||||
} |
||||
|
||||
return { |
||||
code: 20000, |
||||
data: token |
||||
} |
||||
} |
||||
}, |
||||
|
||||
// get user info
|
||||
{ |
||||
url: '/vue-admin-template/user/info\.*', |
||||
type: 'get', |
||||
response: config => { |
||||
const { token } = config.query |
||||
const info = users[token] |
||||
|
||||
// mock error
|
||||
if (!info) { |
||||
return { |
||||
code: 50008, |
||||
message: 'Login failed, unable to get user details.' |
||||
} |
||||
} |
||||
|
||||
return { |
||||
code: 20000, |
||||
data: info |
||||
} |
||||
} |
||||
}, |
||||
|
||||
// user logout
|
||||
{ |
||||
url: '/vue-admin-template/user/logout', |
||||
type: 'post', |
||||
response: _ => { |
||||
return { |
||||
code: 20000, |
||||
data: 'success' |
||||
} |
||||
} |
||||
} |
||||
] |
@ -0,0 +1,9 @@
@@ -0,0 +1,9 @@
|
||||
@url = http://127.0.0.1:5000/ |
||||
### |
||||
POST {{ url }}user/login |
||||
Content-Type: application/json |
||||
|
||||
{ |
||||
"username": "sam", |
||||
"password": "123456" |
||||
} |
@ -0,0 +1,20 @@
@@ -0,0 +1,20 @@
|
||||
const express = require("express"); |
||||
// 路由模块化
|
||||
const router = require("./router"); |
||||
// 解析POST请求
|
||||
const bodyParser = require("body-parser"); |
||||
// 跨域请求
|
||||
const cors = require("cors"); |
||||
|
||||
const app = express(); |
||||
|
||||
app.use(cors()); |
||||
app.use(bodyParser.urlencoded({ extended: true })); |
||||
app.use(bodyParser.json()); |
||||
|
||||
app.use("/", router); |
||||
|
||||
const server = app.listen(5000, () => { |
||||
const { address, port } = server.address(); |
||||
console.log("Http Server is running on http://%s:%s", address, port); |
||||
}); |
@ -0,0 +1,53 @@
@@ -0,0 +1,53 @@
|
||||
const { CODE_SUCCESS, CODE_ERROR } = require("../utils/constant"); |
||||
|
||||
class Result { |
||||
constructor(data, msg = "操作成功", options) { |
||||
this.data = null; |
||||
if (arguments.length === 0) { |
||||
this.msg = "操作成功"; |
||||
} else if (arguments.length === 1) { |
||||
this.msg = data; |
||||
} else { |
||||
this.msg = msg; |
||||
this.data = data; |
||||
if (options) { |
||||
this.options = options; |
||||
} |
||||
} |
||||
} |
||||
|
||||
createResult() { |
||||
if (!this.code) { |
||||
this.code = CODE_SUCCESS; |
||||
} |
||||
let base = { |
||||
code: this.code, |
||||
msg: this.msg, |
||||
}; |
||||
if (this.data) { |
||||
base.data = this.data; |
||||
} |
||||
if (this.options) { |
||||
base = { ...base, ...this.options }; |
||||
} |
||||
|
||||
console.log("Class Result", base); |
||||
return base; |
||||
} |
||||
|
||||
json(res) { |
||||
res.json(this.createResult()); |
||||
} |
||||
|
||||
success(res) { |
||||
this.code = CODE_SUCCESS; |
||||
this.json(res); |
||||
} |
||||
|
||||
fail(res) { |
||||
this.code = CODE_ERROR; |
||||
this.json(res); |
||||
} |
||||
} |
||||
|
||||
module.exports = Result; |
@ -0,0 +1,467 @@
@@ -0,0 +1,467 @@
|
||||
{ |
||||
"requires": true, |
||||
"lockfileVersion": 1, |
||||
"dependencies": { |
||||
"accepts": { |
||||
"version": "1.3.7", |
||||
"resolved": "https://registry.npm.taobao.org/accepts/download/accepts-1.3.7.tgz", |
||||
"integrity": "sha1-UxvHJlF6OytB+FACHGzBXqq1B80=", |
||||
"requires": { |
||||
"mime-types": "~2.1.24", |
||||
"negotiator": "0.6.2" |
||||
} |
||||
}, |
||||
"array-flatten": { |
||||
"version": "1.1.1", |
||||
"resolved": "https://registry.npm.taobao.org/array-flatten/download/array-flatten-1.1.1.tgz?cache=0&sync_timestamp=1574313384951&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Farray-flatten%2Fdownload%2Farray-flatten-1.1.1.tgz", |
||||
"integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=" |
||||
}, |
||||
"bignumber.js": { |
||||
"version": "9.0.0", |
||||
"resolved": "https://registry.npm.taobao.org/bignumber.js/download/bignumber.js-9.0.0.tgz", |
||||
"integrity": "sha1-gFiA+Eoym16sbny2+CdLbYK98HU=" |
||||
}, |
||||
"body-parser": { |
||||
"version": "1.19.0", |
||||
"resolved": "https://registry.npm.taobao.org/body-parser/download/body-parser-1.19.0.tgz", |
||||
"integrity": "sha1-lrJwnlfJxOCab9Zqj9l5hE9p8Io=", |
||||
"requires": { |
||||
"bytes": "3.1.0", |
||||
"content-type": "~1.0.4", |
||||
"debug": "2.6.9", |
||||
"depd": "~1.1.2", |
||||
"http-errors": "1.7.2", |
||||
"iconv-lite": "0.4.24", |
||||
"on-finished": "~2.3.0", |
||||
"qs": "6.7.0", |
||||
"raw-body": "2.4.0", |
||||
"type-is": "~1.6.17" |
||||
} |
||||
}, |
||||
"boom": { |
||||
"version": "7.3.0", |
||||
"resolved": "https://registry.npm.taobao.org/boom/download/boom-7.3.0.tgz", |
||||
"integrity": "sha1-czptlW0zsLGZnaP+bBKZaVDQF7k=", |
||||
"requires": { |
||||
"hoek": "6.x.x" |
||||
} |
||||
}, |
||||
"bytes": { |
||||
"version": "3.1.0", |
||||
"resolved": "https://registry.npm.taobao.org/bytes/download/bytes-3.1.0.tgz", |
||||
"integrity": "sha1-9s95M6Ng4FiPqf3oVlHNx/gF0fY=" |
||||
}, |
||||
"content-disposition": { |
||||
"version": "0.5.3", |
||||
"resolved": "https://registry.npm.taobao.org/content-disposition/download/content-disposition-0.5.3.tgz", |
||||
"integrity": "sha1-4TDK9+cnkIfFYWwgB9BIVpiYT70=", |
||||
"requires": { |
||||
"safe-buffer": "5.1.2" |
||||
} |
||||
}, |
||||
"content-type": { |
||||
"version": "1.0.4", |
||||
"resolved": "https://registry.npm.taobao.org/content-type/download/content-type-1.0.4.tgz", |
||||
"integrity": "sha1-4TjMdeBAxyexlm/l5fjJruJW/js=" |
||||
}, |
||||
"cookie": { |
||||
"version": "0.4.0", |
||||
"resolved": "https://registry.npm.taobao.org/cookie/download/cookie-0.4.0.tgz?cache=0&sync_timestamp=1587525865178&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fcookie%2Fdownload%2Fcookie-0.4.0.tgz", |
||||
"integrity": "sha1-vrQ35wIrO21JAZ0IhmUwPr6cFLo=" |
||||
}, |
||||
"cookie-signature": { |
||||
"version": "1.0.6", |
||||
"resolved": "https://registry.npm.taobao.org/cookie-signature/download/cookie-signature-1.0.6.tgz", |
||||
"integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=" |
||||
}, |
||||
"core-util-is": { |
||||
"version": "1.0.2", |
||||
"resolved": "https://registry.npm.taobao.org/core-util-is/download/core-util-is-1.0.2.tgz", |
||||
"integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" |
||||
}, |
||||
"cors": { |
||||
"version": "2.8.5", |
||||
"resolved": "https://registry.npm.taobao.org/cors/download/cors-2.8.5.tgz", |
||||
"integrity": "sha1-6sEdpRWS3Ya58G9uesKTs9+HXSk=", |
||||
"requires": { |
||||
"object-assign": "^4", |
||||
"vary": "^1" |
||||
} |
||||
}, |
||||
"crypto": { |
||||
"version": "1.0.1", |
||||
"resolved": "https://registry.npm.taobao.org/crypto/download/crypto-1.0.1.tgz", |
||||
"integrity": "sha1-KvG3ytgXXSTIobB3glV5SiGAMDc=" |
||||
}, |
||||
"debug": { |
||||
"version": "2.6.9", |
||||
"resolved": "https://registry.npm.taobao.org/debug/download/debug-2.6.9.tgz", |
||||
"integrity": "sha1-XRKFFd8TT/Mn6QpMk/Tgd6U2NB8=", |
||||
"requires": { |
||||
"ms": "2.0.0" |
||||
} |
||||
}, |
||||
"depd": { |
||||
"version": "1.1.2", |
||||
"resolved": "https://registry.npm.taobao.org/depd/download/depd-1.1.2.tgz", |
||||
"integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=" |
||||
}, |
||||
"destroy": { |
||||
"version": "1.0.4", |
||||
"resolved": "https://registry.npm.taobao.org/destroy/download/destroy-1.0.4.tgz", |
||||
"integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=" |
||||
}, |
||||
"ee-first": { |
||||
"version": "1.1.1", |
||||
"resolved": "https://registry.npm.taobao.org/ee-first/download/ee-first-1.1.1.tgz", |
||||
"integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" |
||||
}, |
||||
"encodeurl": { |
||||
"version": "1.0.2", |
||||
"resolved": "https://registry.npm.taobao.org/encodeurl/download/encodeurl-1.0.2.tgz", |
||||
"integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=" |
||||
}, |
||||
"escape-html": { |
||||
"version": "1.0.3", |
||||
"resolved": "https://registry.npm.taobao.org/escape-html/download/escape-html-1.0.3.tgz", |
||||
"integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=" |
||||
}, |
||||
"etag": { |
||||
"version": "1.8.1", |
||||
"resolved": "https://registry.npm.taobao.org/etag/download/etag-1.8.1.tgz", |
||||
"integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=" |
||||
}, |
||||
"express": { |
||||
"version": "4.17.1", |
||||
"resolved": "https://registry.npm.taobao.org/express/download/express-4.17.1.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fexpress%2Fdownload%2Fexpress-4.17.1.tgz", |
||||
"integrity": "sha1-RJH8OGBc9R+GKdOcK10Cb5ikwTQ=", |
||||
"requires": { |
||||
"accepts": "~1.3.7", |
||||
"array-flatten": "1.1.1", |
||||
"body-parser": "1.19.0", |
||||
"content-disposition": "0.5.3", |
||||
"content-type": "~1.0.4", |
||||
"cookie": "0.4.0", |
||||
"cookie-signature": "1.0.6", |
||||
"debug": "2.6.9", |
||||
"depd": "~1.1.2", |
||||
"encodeurl": "~1.0.2", |
||||
"escape-html": "~1.0.3", |
||||
"etag": "~1.8.1", |
||||
"finalhandler": "~1.1.2", |
||||
"fresh": "0.5.2", |
||||
"merge-descriptors": "1.0.1", |
||||
"methods": "~1.1.2", |
||||
"on-finished": "~2.3.0", |
||||
"parseurl": "~1.3.3", |
||||
"path-to-regexp": "0.1.7", |
||||
"proxy-addr": "~2.0.5", |
||||
"qs": "6.7.0", |
||||
"range-parser": "~1.2.1", |
||||
"safe-buffer": "5.1.2", |
||||
"send": "0.17.1", |
||||
"serve-static": "1.14.1", |
||||
"setprototypeof": "1.1.1", |
||||
"statuses": "~1.5.0", |
||||
"type-is": "~1.6.18", |
||||
"utils-merge": "1.0.1", |
||||
"vary": "~1.1.2" |
||||
} |
||||
}, |
||||
"finalhandler": { |
||||
"version": "1.1.2", |
||||
"resolved": "https://registry.npm.taobao.org/finalhandler/download/finalhandler-1.1.2.tgz", |
||||
"integrity": "sha1-t+fQAP/RGTjQ/bBTUG9uur6fWH0=", |
||||
"requires": { |
||||
"debug": "2.6.9", |
||||
"encodeurl": "~1.0.2", |
||||
"escape-html": "~1.0.3", |
||||
"on-finished": "~2.3.0", |
||||
"parseurl": "~1.3.3", |
||||
"statuses": "~1.5.0", |
||||
"unpipe": "~1.0.0" |
||||
} |
||||
}, |
||||
"forwarded": { |
||||
"version": "0.1.2", |
||||
"resolved": "https://registry.npm.taobao.org/forwarded/download/forwarded-0.1.2.tgz", |
||||
"integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=" |
||||
}, |
||||
"fresh": { |
||||
"version": "0.5.2", |
||||
"resolved": "https://registry.npm.taobao.org/fresh/download/fresh-0.5.2.tgz", |
||||
"integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=" |
||||
}, |
||||
"hoek": { |
||||
"version": "6.1.3", |
||||
"resolved": "https://registry.npm.taobao.org/hoek/download/hoek-6.1.3.tgz", |
||||
"integrity": "sha1-c7fTOVLgH+J6OLBFcpS3ndjaJCw=" |
||||
}, |
||||
"http-errors": { |
||||
"version": "1.7.2", |
||||
"resolved": "https://registry.npm.taobao.org/http-errors/download/http-errors-1.7.2.tgz", |
||||
"integrity": "sha1-T1ApzxMjnzEDblsuVSkrz7zIXI8=", |
||||
"requires": { |
||||
"depd": "~1.1.2", |
||||
"inherits": "2.0.3", |
||||
"setprototypeof": "1.1.1", |
||||
"statuses": ">= 1.5.0 < 2", |
||||
"toidentifier": "1.0.0" |
||||
} |
||||
}, |
||||
"iconv-lite": { |
||||
"version": "0.4.24", |
||||
"resolved": "https://registry.npm.taobao.org/iconv-lite/download/iconv-lite-0.4.24.tgz?cache=0&sync_timestamp=1591605412872&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Ficonv-lite%2Fdownload%2Ficonv-lite-0.4.24.tgz", |
||||
"integrity": "sha1-ICK0sl+93CHS9SSXSkdKr+czkIs=", |
||||
"requires": { |
||||
"safer-buffer": ">= 2.1.2 < 3" |
||||
} |
||||
}, |
||||
"inherits": { |
||||
"version": "2.0.3", |
||||
"resolved": "https://registry.npm.taobao.org/inherits/download/inherits-2.0.3.tgz", |
||||
"integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" |
||||
}, |
||||
"ipaddr.js": { |
||||
"version": "1.9.1", |
||||
"resolved": "https://registry.npm.taobao.org/ipaddr.js/download/ipaddr.js-1.9.1.tgz", |
||||
"integrity": "sha1-v/OFQ+64mEglB5/zoqjmy9RngbM=" |
||||
}, |
||||
"isarray": { |
||||
"version": "1.0.0", |
||||
"resolved": "https://registry.npm.taobao.org/isarray/download/isarray-1.0.0.tgz", |
||||
"integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" |
||||
}, |
||||
"media-typer": { |
||||
"version": "0.3.0", |
||||
"resolved": "https://registry.npm.taobao.org/media-typer/download/media-typer-0.3.0.tgz", |
||||
"integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=" |
||||
}, |
||||
"merge-descriptors": { |
||||
"version": "1.0.1", |
||||
"resolved": "https://registry.npm.taobao.org/merge-descriptors/download/merge-descriptors-1.0.1.tgz", |
||||
"integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=" |
||||
}, |
||||
"methods": { |
||||
"version": "1.1.2", |
||||
"resolved": "https://registry.npm.taobao.org/methods/download/methods-1.1.2.tgz", |
||||
"integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=" |
||||
}, |
||||
"mime": { |
||||
"version": "1.6.0", |
||||
"resolved": "https://registry.npm.taobao.org/mime/download/mime-1.6.0.tgz?cache=0&sync_timestamp=1590596706367&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmime%2Fdownload%2Fmime-1.6.0.tgz", |
||||
"integrity": "sha1-Ms2eXGRVO9WNGaVor0Uqz/BJgbE=" |
||||
}, |
||||
"mime-db": { |
||||
"version": "1.44.0", |
||||
"resolved": "https://registry.npm.taobao.org/mime-db/download/mime-db-1.44.0.tgz?cache=0&sync_timestamp=1587603342053&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmime-db%2Fdownload%2Fmime-db-1.44.0.tgz", |
||||
"integrity": "sha1-+hHF6wrKEzS0Izy01S8QxaYnL5I=" |
||||
}, |
||||
"mime-types": { |
||||
"version": "2.1.27", |
||||
"resolved": "https://registry.npm.taobao.org/mime-types/download/mime-types-2.1.27.tgz", |
||||
"integrity": "sha1-R5SfmOJ56lMRn1ci4PNOUpvsAJ8=", |
||||
"requires": { |
||||
"mime-db": "1.44.0" |
||||
} |
||||
}, |
||||
"ms": { |
||||
"version": "2.0.0", |
||||
"resolved": "https://registry.npm.taobao.org/ms/download/ms-2.0.0.tgz", |
||||
"integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=" |
||||
}, |
||||
"mysql": { |
||||
"version": "2.18.1", |
||||
"resolved": "https://registry.npm.taobao.org/mysql/download/mysql-2.18.1.tgz", |
||||
"integrity": "sha1-IlQUOFXFqMc4JeRSK68uoCF2Zxc=", |
||||
"requires": { |
||||
"bignumber.js": "9.0.0", |
||||
"readable-stream": "2.3.7", |
||||
"safe-buffer": "5.1.2", |
||||
"sqlstring": "2.3.1" |
||||
} |
||||
}, |
||||
"negotiator": { |
||||
"version": "0.6.2", |
||||
"resolved": "https://registry.npm.taobao.org/negotiator/download/negotiator-0.6.2.tgz", |
||||
"integrity": "sha1-/qz3zPUlp3rpY0Q2pkiD/+yjRvs=" |
||||
}, |
||||
"object-assign": { |
||||
"version": "4.1.1", |
||||
"resolved": "https://registry.npm.taobao.org/object-assign/download/object-assign-4.1.1.tgz?cache=0&sync_timestamp=1571657171505&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fobject-assign%2Fdownload%2Fobject-assign-4.1.1.tgz", |
||||
"integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" |
||||
}, |
||||
"on-finished": { |
||||
"version": "2.3.0", |
||||
"resolved": "https://registry.npm.taobao.org/on-finished/download/on-finished-2.3.0.tgz", |
||||
"integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", |
||||
"requires": { |
||||
"ee-first": "1.1.1" |
||||
} |
||||
}, |
||||
"parseurl": { |
||||
"version": "1.3.3", |
||||
"resolved": "https://registry.npm.taobao.org/parseurl/download/parseurl-1.3.3.tgz", |
||||
"integrity": "sha1-naGee+6NEt/wUT7Vt2lXeTvC6NQ=" |
||||
}, |
||||
"path-to-regexp": { |
||||
"version": "0.1.7", |
||||
"resolved": "https://registry.npm.taobao.org/path-to-regexp/download/path-to-regexp-0.1.7.tgz", |
||||
"integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=" |
||||
}, |
||||
"process-nextick-args": { |
||||
"version": "2.0.1", |
||||
"resolved": "https://registry.npm.taobao.org/process-nextick-args/download/process-nextick-args-2.0.1.tgz", |
||||
"integrity": "sha1-eCDZsWEgzFXKmud5JoCufbptf+I=" |
||||
}, |
||||
"proxy-addr": { |
||||
"version": "2.0.6", |
||||
"resolved": "https://registry.npm.taobao.org/proxy-addr/download/proxy-addr-2.0.6.tgz?cache=0&sync_timestamp=1582528781064&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fproxy-addr%2Fdownload%2Fproxy-addr-2.0.6.tgz", |
||||
"integrity": "sha1-/cIzZQVEfT8vLGOO0nLK9hS7sr8=", |
||||
"requires": { |
||||
"forwarded": "~0.1.2", |
||||
"ipaddr.js": "1.9.1" |
||||
} |
||||
}, |
||||
"qs": { |
||||
"version": "6.7.0", |
||||
"resolved": "https://registry.npm.taobao.org/qs/download/qs-6.7.0.tgz", |
||||
"integrity": "sha1-QdwaAV49WB8WIXdr4xr7KHapsbw=" |
||||
}, |
||||
"range-parser": { |
||||
"version": "1.2.1", |
||||
"resolved": "https://registry.npm.taobao.org/range-parser/download/range-parser-1.2.1.tgz", |
||||
"integrity": "sha1-PPNwI9GZ4cJNGlW4SADC8+ZGgDE=" |
||||
}, |
||||
"raw-body": { |
||||
"version": "2.4.0", |
||||
"resolved": "https://registry.npm.taobao.org/raw-body/download/raw-body-2.4.0.tgz", |
||||
"integrity": "sha1-oc5vucm8NWylLoklarWQWeE9AzI=", |
||||
"requires": { |
||||
"bytes": "3.1.0", |
||||
"http-errors": "1.7.2", |
||||
"iconv-lite": "0.4.24", |
||||
"unpipe": "1.0.0" |
||||
} |
||||
}, |
||||
"readable-stream": { |
||||
"version": "2.3.7", |
||||
"resolved": "https://registry.npm.taobao.org/readable-stream/download/readable-stream-2.3.7.tgz?cache=0&sync_timestamp=1581624324274&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Freadable-stream%2Fdownload%2Freadable-stream-2.3.7.tgz", |
||||
"integrity": "sha1-Hsoc9xGu+BTAT2IlKjamL2yyO1c=", |
||||
"requires": { |
||||
"core-util-is": "~1.0.0", |
||||
"inherits": "~2.0.3", |
||||
"isarray": "~1.0.0", |
||||
"process-nextick-args": "~2.0.0", |
||||
"safe-buffer": "~5.1.1", |
||||
"string_decoder": "~1.1.1", |
||||
"util-deprecate": "~1.0.1" |
||||
} |
||||
}, |
||||
"safe-buffer": { |
||||
"version": "5.1.2", |
||||
"resolved": "https://registry.npm.taobao.org/safe-buffer/download/safe-buffer-5.1.2.tgz", |
||||
"integrity": "sha1-mR7GnSluAxN0fVm9/St0XDX4go0=" |
||||
}, |
||||
"safer-buffer": { |
||||
"version": "2.1.2", |
||||
"resolved": "https://registry.npm.taobao.org/safer-buffer/download/safer-buffer-2.1.2.tgz", |
||||
"integrity": "sha1-RPoWGwGHuVSd2Eu5GAL5vYOFzWo=" |
||||
}, |
||||
"send": { |
||||
"version": "0.17.1", |
||||
"resolved": "https://registry.npm.taobao.org/send/download/send-0.17.1.tgz", |
||||
"integrity": "sha1-wdiwWfeQD3Rm3Uk4vcROEd2zdsg=", |
||||
"requires": { |
||||
"debug": "2.6.9", |
||||
"depd": "~1.1.2", |
||||
"destroy": "~1.0.4", |
||||
"encodeurl": "~1.0.2", |
||||
"escape-html": "~1.0.3", |
||||
"etag": "~1.8.1", |
||||
"fresh": "0.5.2", |
||||
"http-errors": "~1.7.2", |
||||
"mime": "1.6.0", |
||||
"ms": "2.1.1", |
||||
"on-finished": "~2.3.0", |
||||
"range-parser": "~1.2.1", |
||||
"statuses": "~1.5.0" |
||||
}, |
||||
"dependencies": { |
||||
"ms": { |
||||
"version": "2.1.1", |
||||
"resolved": "https://registry.npm.taobao.org/ms/download/ms-2.1.1.tgz", |
||||
"integrity": "sha1-MKWGTrPrsKZvLr5tcnrwagnYbgo=" |
||||
} |
||||
} |
||||
}, |
||||
"serve-static": { |
||||
"version": "1.14.1", |
||||
"resolved": "https://registry.npm.taobao.org/serve-static/download/serve-static-1.14.1.tgz", |
||||
"integrity": "sha1-Zm5jbcTwEPfvKZcKiKZ0MgiYsvk=", |
||||
"requires": { |
||||
"encodeurl": "~1.0.2", |
||||
"escape-html": "~1.0.3", |
||||
"parseurl": "~1.3.3", |
||||
"send": "0.17.1" |
||||
} |
||||
}, |
||||
"setprototypeof": { |
||||
"version": "1.1.1", |
||||
"resolved": "https://registry.npm.taobao.org/setprototypeof/download/setprototypeof-1.1.1.tgz", |
||||
"integrity": "sha1-fpWsskqpL1iF4KvvW6ExMw1K5oM=" |
||||
}, |
||||
"sqlstring": { |
||||
"version": "2.3.1", |
||||
"resolved": "https://registry.npm.taobao.org/sqlstring/download/sqlstring-2.3.1.tgz", |
||||
"integrity": "sha1-R1OT/56RR5rqYtyvDKPRSYOn+0A=" |
||||
}, |
||||
"statuses": { |
||||
"version": "1.5.0", |
||||
"resolved": "https://registry.npm.taobao.org/statuses/download/statuses-1.5.0.tgz?cache=0&sync_timestamp=1587327902535&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fstatuses%2Fdownload%2Fstatuses-1.5.0.tgz", |
||||
"integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=" |
||||
}, |
||||
"string_decoder": { |
||||
"version": "1.1.1", |
||||
"resolved": "https://registry.npm.taobao.org/string_decoder/download/string_decoder-1.1.1.tgz", |
||||
"integrity": "sha1-nPFhG6YmhdcDCunkujQUnDrwP8g=", |
||||
"requires": { |
||||
"safe-buffer": "~5.1.0" |
||||
} |
||||
}, |
||||
"toidentifier": { |
||||
"version": "1.0.0", |
||||
"resolved": "https://registry.npm.taobao.org/toidentifier/download/toidentifier-1.0.0.tgz", |
||||
"integrity": "sha1-fhvjRw8ed5SLxD2Uo8j013UrpVM=" |
||||
}, |
||||
"type-is": { |
||||
"version": "1.6.18", |
||||
"resolved": "https://registry.npm.taobao.org/type-is/download/type-is-1.6.18.tgz", |
||||
"integrity": "sha1-TlUs0F3wlGfcvE73Od6J8s83wTE=", |
||||
"requires": { |
||||
"media-typer": "0.3.0", |
||||
"mime-types": "~2.1.24" |
||||
} |
||||
}, |
||||
"unpipe": { |
||||
"version": "1.0.0", |
||||
"resolved": "https://registry.npm.taobao.org/unpipe/download/unpipe-1.0.0.tgz", |
||||
"integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=" |
||||
}, |
||||
"util-deprecate": { |
||||
"version": "1.0.2", |
||||
"resolved": "https://registry.npm.taobao.org/util-deprecate/download/util-deprecate-1.0.2.tgz", |
||||
"integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=" |
||||
}, |
||||
"utils-merge": { |
||||
"version": "1.0.1", |
||||
"resolved": "https://registry.npm.taobao.org/utils-merge/download/utils-merge-1.0.1.tgz", |
||||
"integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=" |
||||
}, |
||||
"vary": { |
||||
"version": "1.1.2", |
||||
"resolved": "https://registry.npm.taobao.org/vary/download/vary-1.1.2.tgz", |
||||
"integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=" |
||||
} |
||||
} |
||||
} |
@ -0,0 +1,18 @@
@@ -0,0 +1,18 @@
|
||||
const express = require("express"); |
||||
const boom = require("boom"); |
||||
|
||||
const userRouter = require("./user"); |
||||
|
||||
const router = express.Router(); |
||||
|
||||
router.get("/", (req, res) => { |
||||
res.send("Welcome Server"); |
||||
}); |
||||
|
||||
router.use("/user", userRouter) |
||||
|
||||
router.use((req, res, next) => { |
||||
next(boom.notFound("API不存在")); |
||||
}); |
||||
|
||||
module.exports = router; |
@ -0,0 +1,25 @@
@@ -0,0 +1,25 @@
|
||||
const express = require("express"); |
||||
const Result = require("../models/Result"); |
||||
const { login } = require("../service/user"); |
||||
|
||||
const router = express.Router(); |
||||
|
||||
router.post("/login", (req, res, next) => { |
||||
console.log("Body", req.body); |
||||
const username = req.body.username; |
||||
const password = req.body.password; |
||||
|
||||
login(username, password).then((user) => { |
||||
if (!user || user.length === 0) { |
||||
new Result("登录失败").fail(res); |
||||
} else { |
||||
new Result("登录成功").success(res); |
||||
} |
||||
}); |
||||
// res.json({
|
||||
// code: 0,
|
||||
// msg: "登录成功"
|
||||
// })
|
||||
}); |
||||
|
||||
module.exports = router; |
@ -0,0 +1,10 @@
@@ -0,0 +1,10 @@
|
||||
const { querySql } = require("../db"); |
||||
|
||||
function login(username, password) { |
||||
const sql = `select * from admin_user where username='${username}' and password='${password}'`; |
||||
return querySql(sql); |
||||
} |
||||
|
||||
module.exports = { |
||||
login, |
||||
}; |
Loading…
Reference in new issue