【发布时间】:2022-08-19 11:09:22
【问题描述】:
我在 heroku 上部署了我的应用程序,它的部分功能是因为我有“服务器”端代码,该代码使用 mongoDB 地图集对用户进行身份验证,并对 Yelp 的 API 执行 api 请求。我的应用程序对用户的身份验证很好,但是当我请求获取附近的地方时,我在控制台中收到此错误。
GET https://my-first-trip.herokuapp.com/category/21.3420389/-157.7992015/pizza 503 (Service Unavailable)
这是位于根目录中的server.js 的代码:
require(\'dotenv\').config()
const express = require(\'express\');
const app = express();
const cors = require(\"cors\");
const axios = require(\'axios\');
const mongoose = require(\"mongoose\")
const User = require(\'./models/user\')
const session = require(\'express-session\')
const bcrypt = require(\'bcrypt\')
const MongoStore = require(\'connect-mongo\')
const saltRounds = 6
const path = require(\'path\')
mongoose.connect(process.env.ATLAS_URI)
app.use(express.json());
app.use(cors({
origin: [\"http://localhost:3000\"],
methods: [\"GET\", \"POST\", \"DELETE\"],
credentials: true
}))
// app.use(express.urlencoded())
app.set(\'trust proxy\', 1) // trust first proxy
app.use(session({
secret: \'\',
resave: false,
saveUninitialized: true,
cookie: { secure: false },
store: MongoStore.create({
mongoUrl: process.env.ATLAS_URI,
// collectionName: \'users\'
})
}))
app.use(express.static(path.join(__dirname, \"client\", \"build\")))
app.get(\"/category/:lat/:lng/:searchCategory\", (req, res) => {
const searchCategory = req.params.searchCategory
// console.log(req.session.id)
console.log(\"performing yelp businesses search request\")
const lat = req.params.lat
const lng = req.params.lng
const config = {
method: \'get\',
url: \'https://api.yelp.com/v3/businesses/search?term=\' +
searchCategory +
\'&latitude=\' +
lat +
\'&longitude=\' +
lng +
\'&limit=3&sort_by=review_count\',
headers: {
\'Authorization\': process.env.YELP_API
}
};
axios(config)
.then((response) => {
res.json(response.data)
// console.log(response.data);
})
.catch((error) => {
res.json(error) //this returns \'request failed with status code 400\'
});
});
app.post(\'/signup\', (req, res) => {
const email = req.body.email
const plainTextPassword = req.body.password;
//check if user already exists
User.find({ email: email }, (err, existingUser) => {
if (existingUser.length === 0) {
bcrypt.hash(plainTextPassword, saltRounds, async (err, hash) => {
try {
const user = new User({
email: email,
password: hash
});
let result = await user.save();
if (result) {
console.log(\"saved successfully\")
res.send(result)
}
} catch (e) {
res.send(\"Something Went Wrong\");
console.log(\"something went wrong ---\" + e)
}
})
} else {
//notify user that account exists
}
})
})
//verify if user is ALREADY auth\'d
app.get(\'/login\', (req, res) => {
console.log(\"testing\");
// console.log(req.session + \' \' + req.session.id)
if (req.session.user) {
// console.log(\'already authenticated\')
// console.log(req.session.id)
res.json({ loggedIn: true })
} else {
res.json({ loggedIn: false })
}
})
app.post(\'/login\', (req, res) => {
const email = req.body.email;
const plainTextPassword = req.body.password;
User.find({ email: email }).limit(1).exec(function (err, existingUser) {
if (existingUser.length === 0) {
//tell user that account doesnt exist
console.log(\"account doesnt exist\")
} else {
// console.log(existingUser[0])
bcrypt.compare(plainTextPassword, existingUser[0].password, function (err, response) {
if (response === true) {
console.log(\'successfully logged in \')
req.session.user = existingUser[0]._id
res.json(req.session)
} else {
console.log(\"incorrect password \")
}
})
}
}
)
})
app.get(\'/logout\', (req, res) => {
req.session.destroy(() => {
console.log(\"session has been deleted\")
res.send({ loggedIn: false })
})
})
app.get(\"*\", (req, res) => {
res.sendFile(path.join(__dirname, \"client\", \"build\", \"index.html\"));
});
app.listen(process.env.PORT || 5000);
所以唯一不起作用的路线是app.get(\"/category/:lat/:lng/:searchCategory\"。在 heroku cli 中,我得到 code=H12 和 desc=Request timeout。我非常有信心我的 yelp api 查询是一种快速且便宜的查询。我不确定如何进一步调试。
标签: node.js reactjs express heroku