1
0
mirror of https://github.com/uetchy/namae.git synced 2025-03-17 04:30:31 +09:00

feat: cache only if the response is succeeded

This commit is contained in:
uetchy 2019-08-01 13:22:03 +09:00
parent 536e65e10e
commit a8fa8a04d1
12 changed files with 43 additions and 34 deletions

View File

@ -1,11 +1,5 @@
const fetch = require('isomorphic-unfetch')
async function getAvailability(name) {
const response = await fetch(
`https://crates.io/api/v1/crates/${encodeURIComponent(name)}`
)
return response.status !== 200
}
const { send, sendError } = require('../util/http')
module.exports = async (req, res) => {
const name = req.query.name
@ -15,9 +9,12 @@ module.exports = async (req, res) => {
}
try {
const availability = await getAvailability(name)
res.json({ availability })
const response = await fetch(
`https://crates.io/api/v1/crates/${encodeURIComponent(name)}`
)
const availability = response.status !== 200
send(res, availability)
} catch (err) {
res.status(400).json({ error: err.message })
sendError(res, err)
}
}

View File

@ -1,4 +1,5 @@
var dns = require('dns')
const { send, sendError } = require('../util/http')
function resolvePromise(hostname) {
return new Promise((resolve, reject) => {
@ -19,12 +20,11 @@ module.exports = async (req, res) => {
try {
const response = await resolvePromise(name)
const availability = response && response.length > 0 ? false : true
res.json({ availability })
send(res, availability)
} catch (err) {
if (err.code === 'ENODATA' || err.code === 'ENOTFOUND') {
return res.status(200).json({ availability: true })
}
res.status(400).json({ error: err.message })
sendError(res, err)
}
}

View File

@ -1,4 +1,5 @@
import whois from 'whois-json'
const { send, sendError } = require('../util/http')
module.exports = async (req, res) => {
const name = req.query.name
@ -10,9 +11,8 @@ module.exports = async (req, res) => {
try {
const response = await whois(name, { follow: 3, verbose: true })
const availability = response[0].data.domainName ? false : true
res.json({ availability })
send(res, availability)
} catch (err) {
res.status(400).json({ error: err.message })
sendError(res, err)
}
}

View File

@ -1,4 +1,5 @@
const fetch = require('isomorphic-unfetch')
const { send, sendError } = require('../util/http')
async function getAvailability(name) {
const response = await fetch(`https://github.com/${encodeURIComponent(name)}`)
@ -14,8 +15,8 @@ module.exports = async (req, res) => {
try {
const availability = await getAvailability(name)
res.json({ availability })
send(res, availability)
} catch (err) {
res.status(400).json({ error: err.message })
sendError(res, err)
}
}

View File

@ -1,4 +1,5 @@
const npmName = require('npm-name')
const { send, sendError } = require('../util/http')
module.exports = async (req, res) => {
const name = req.query.name
@ -9,8 +10,8 @@ module.exports = async (req, res) => {
try {
const availability = await npmName(`@${name}`)
res.json({ availability })
send(res, availability)
} catch (err) {
res.status(400).json({ error: err.message })
sendError(res, err)
}
}

View File

@ -1,4 +1,5 @@
const npmName = require('npm-name')
const { send, sendError } = require('../util/http')
module.exports = async (req, res) => {
const name = req.query.name
@ -9,8 +10,8 @@ module.exports = async (req, res) => {
try {
const availability = await npmName(name)
res.json({ availability })
send(res, availability)
} catch (err) {
res.status(400).json({ error: err.message })
sendError(res, err)
}
}

View File

@ -1,4 +1,5 @@
const fetch = require('isomorphic-unfetch')
const { send, sendError } = require('../util/http')
async function getAvailability(name) {
const response = await fetch(
@ -16,8 +17,8 @@ module.exports = async (req, res) => {
try {
const availability = await getAvailability(name)
res.json({ availability })
send(res, availability)
} catch (err) {
res.status(400).json({ error: err.message })
sendError(res, err)
}
}

View File

@ -1,4 +1,5 @@
const fetch = require('isomorphic-unfetch')
const { send, sendError } = require('../util/http')
async function getAvailability(name) {
const response = await fetch(
@ -16,8 +17,8 @@ module.exports = async (req, res) => {
try {
const availability = await getAvailability(name)
res.json({ availability })
send(res, availability)
} catch (err) {
res.status(400).json({ error: err.message })
sendError(res, err)
}
}

View File

@ -1,4 +1,5 @@
const fetch = require('isomorphic-unfetch')
const { send, sendError } = require('../util/http')
async function getAvailability(name) {
try {
@ -24,8 +25,8 @@ module.exports = async (req, res) => {
try {
const availability = await getAvailability(name)
res.json({ availability })
send(res, availability)
} catch (err) {
res.status(400).json({ error: err.message })
sendError(res, err)
}
}

View File

@ -1,4 +1,5 @@
const fetch = require('isomorphic-unfetch')
const { send, sendError } = require('../util/http')
async function getAvailability(name) {
const response = await fetch(
@ -16,8 +17,8 @@ module.exports = async (req, res) => {
try {
const availability = await getAvailability(name)
res.json({ availability })
send(res, availability)
} catch (err) {
res.status(400).json({ error: err.message })
sendError(res, err)
}
}

8
api/util/http.js Normal file
View File

@ -0,0 +1,8 @@
exports.send = (res, availability) => {
res.setHeader('Cache-Control', 'maxage=0, s-maxage=3600')
res.json({ availability })
}
exports.sendError = (res, error) => {
res.status(400).json({ error: error.message })
}

View File

@ -16,10 +16,7 @@
"routes": [
{
"src": "/availability/(?<provider>[^/]+)/(?<id>[^/]+)",
"dest": "/api/services/$provider.js?name=$id",
"headers": {
"Cache-Control": "maxage=0, s-maxage=3600"
}
"dest": "/api/services/$provider.js?name=$id"
},
{
"src": "/(.*)",