1
0
mirror of https://github.com/uetchy/namae.git synced 2025-03-17 12:30:32 +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') const fetch = require('isomorphic-unfetch')
const { send, sendError } = require('../util/http')
async function getAvailability(name) {
const response = await fetch(
`https://crates.io/api/v1/crates/${encodeURIComponent(name)}`
)
return response.status !== 200
}
module.exports = async (req, res) => { module.exports = async (req, res) => {
const name = req.query.name const name = req.query.name
@ -15,9 +9,12 @@ module.exports = async (req, res) => {
} }
try { try {
const availability = await getAvailability(name) const response = await fetch(
res.json({ availability }) `https://crates.io/api/v1/crates/${encodeURIComponent(name)}`
)
const availability = response.status !== 200
send(res, availability)
} catch (err) { } catch (err) {
res.status(400).json({ error: err.message }) sendError(res, err)
} }
} }

View File

@ -1,4 +1,5 @@
var dns = require('dns') var dns = require('dns')
const { send, sendError } = require('../util/http')
function resolvePromise(hostname) { function resolvePromise(hostname) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
@ -19,12 +20,11 @@ module.exports = async (req, res) => {
try { try {
const response = await resolvePromise(name) const response = await resolvePromise(name)
const availability = response && response.length > 0 ? false : true const availability = response && response.length > 0 ? false : true
send(res, availability)
res.json({ availability })
} catch (err) { } catch (err) {
if (err.code === 'ENODATA' || err.code === 'ENOTFOUND') { if (err.code === 'ENODATA' || err.code === 'ENOTFOUND') {
return res.status(200).json({ availability: true }) 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' import whois from 'whois-json'
const { send, sendError } = require('../util/http')
module.exports = async (req, res) => { module.exports = async (req, res) => {
const name = req.query.name const name = req.query.name
@ -10,9 +11,8 @@ module.exports = async (req, res) => {
try { try {
const response = await whois(name, { follow: 3, verbose: true }) const response = await whois(name, { follow: 3, verbose: true })
const availability = response[0].data.domainName ? false : true const availability = response[0].data.domainName ? false : true
send(res, availability)
res.json({ availability })
} catch (err) { } catch (err) {
res.status(400).json({ error: err.message }) sendError(res, err)
} }
} }

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -1,4 +1,5 @@
const fetch = require('isomorphic-unfetch') const fetch = require('isomorphic-unfetch')
const { send, sendError } = require('../util/http')
async function getAvailability(name) { async function getAvailability(name) {
const response = await fetch( const response = await fetch(
@ -16,8 +17,8 @@ module.exports = async (req, res) => {
try { try {
const availability = await getAvailability(name) const availability = await getAvailability(name)
res.json({ availability }) send(res, availability)
} catch (err) { } 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": [ "routes": [
{ {
"src": "/availability/(?<provider>[^/]+)/(?<id>[^/]+)", "src": "/availability/(?<provider>[^/]+)/(?<id>[^/]+)",
"dest": "/api/services/$provider.js?name=$id", "dest": "/api/services/$provider.js?name=$id"
"headers": {
"Cache-Control": "maxage=0, s-maxage=3600"
}
}, },
{ {
"src": "/(.*)", "src": "/(.*)",