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:
parent
536e65e10e
commit
a8fa8a04d1
@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -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
8
api/util/http.js
Normal 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 })
|
||||||
|
}
|
5
now.json
5
now.json
@ -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": "/(.*)",
|
||||||
|
Loading…
x
Reference in New Issue
Block a user