#node.js #mongodb #api #express #crud
Вопрос:
Я создаю свой первый API, который я использовал .env
для переменных базы данных в этом URL:
const uri = `mongodb srv://${mongo_user}:${mongo_pwd}@cluster0.ynvbj.mongodb.net/${mongo_db}?retryWrites=trueamp;w=majority`
затем создал клиента:
const client = new MongoClient(uri, { useNewUrlParser: true, useUnifiedTopology: true })
Затем основная функция, которая вызывает функции, которые находят данные от пользователей, подобных Mongo:
async function main() {
try {
await client.connect();
await getUser(client, 'users', mongo_db);
} catch (e) {
console.error(e);
} finally {
await client.close();
}
}
main().catch(console.err);
//------GET
//user by Dni
async function getUser(client, coll, mongo_db){
const collection = await client.db(`${mongo_db}`).collection(`${coll}`)
.find({dni: 38383838}).toArray(function(err, results) {
console.log(results);
return results;
})
};
И, наконец, я создал маршруты, но я получаю undefined
. Я все проверил и не понял, что не так.
const {getUser, getOrder, getProducts} = require('./db_connection')
const {Router} = require('express')
const router = Router()
//GET
//get user
router.get('/users', async (req, res) => {
let data = await getUser;
res.json({data});
})
module.exports = router;
И это app.js
const express = require('express')
const app = express()
require('dotenv').config();
//settings
app.set('port', process.env.PORT || 3000)
//middlewares
app.use(express.urlencoded({extended:false}))
app.use(express.json())
//server
app.listen(app.get('port'), ()=> {
console.log(`Server running on port ${app.get('port')}`)
})
//require api
app.use('/api', require('./api_routes'))
Комментарии:
1. Пожалуйста, отредактируйте свой вопрос и добавьте свой код как код, а не как изображения.
2. Привет, вы можете предоставить свой код в качестве кода вместо изображений. Кроме того, вы можете предоставить трассировку стека и строку, которая дает вам «неопределенное», пожалуйста
3. @Dominik Привет, я отредактировал вопрос с кодом, спасибо. Это в терминале, и я не вижу данных json на локальном хост-сервере, работающем на порту 3002, не определено
4. @TheBritishAreComing Конечно, я отредактировал, чтобы вы могли увидеть код. Терминал показывает: Сервер, работающий на порту 3002, не определен
5. Строка
let data = await getUser;
не выполняет функцию и не передает аргументы, которые вы ожидаете. Это должно бытьlet data = await getUser(client, coll, mongo_db);
Ответ №1:
Похоже, ваши результаты не определены, это может быть по множеству разных причин.
Там, где у вас есть console.log(results)
, вы можете заменить это на console.debug(err, results);
Это может дать вам больше понимания причины, по которой он не получает результатов.
async function getUser(client, coll, mongo_db){
const collection = await client.db(`${mongo_db}`).collection(`${coll}`)
.find({dni: 38383838})
.toArray(function(err, results) {
console.debug(err, results);
return results;
})
};
Комментарии:
1. Omg вот что я получил: MongoExpiredSessionError: Не удается использовать сеанс, который закончился. Я думаю, что это может быть версия Монго ! я попробую обновить его.