#mongodb #fastify
Вопрос:
Мой плагин выглядит так
import fp from 'fastify-plugin';
import mongodb from 'fastify-mongodb';
export default fp(async (fastify) => {
fastify.register(mongodb, {
url: 'mongodb srv://dbuser:password@cluster0.otigz.mongodb.net/myapp?retryWrites=trueamp;w=majority',
});
});
и мой куратор выглядит так
const postJoinHandler = async (
request: any,
reply: any
): Promise<{ id: string; name: string }> => {
try {
const { username, password } = request.body;
const test = await reply.mongo.db.users.insertOne({
username,
password,
});
console.log(test);
return reply.code(201).send(username);
} catch (error) {
request.log.error(error);
return reply.send(400);
}
};
Ожидал, что он вставит имя пользователя и пароль в коллекцию именованных пользователей, но этого не произошло? и ошибка в том, что Cannot read property 'db' of undefined
Я тоже пытался
reply.mongodb.users.insertOne({...
и
const test = await request.mongodb.collection('users');
test.insertOne({
username,
password,
});
console.log(test);
и
const test = await this.mongo.db.collection('users'); //<= Object is possibly 'undefined'
Маршруты выглядят так
import { FastifyPluginAsync } from 'fastify';
import { postJoinSchema, postLoginSchema } from '../schemas/auth';
const auth: FastifyPluginAsync = async (fastify): Promise<void> => {
fastify.post('/auth/join', postJoinSchema);
fastify.post('/auth/login', postLoginSchema);
};
export default auth;
Ответ №1:
mongo
Декоратор прикреплен к fastify
экземпляру, а не к объекту request
nor reply
.
Вам следует переместить обработчики в файл маршрутов и прочитать fastify.mongo
или использовать именованную функцию в качестве обработчика.
В последнем случае обработчик this
привязан к fastify
экземпляру.
async function postJoinHandler (
request,
reply
) {
try {
const { username, password } = request.body;
const test = await this.mongo.db.users.insertOne({
username,
password,
});
console.log(test);
reply.code(201)
return username
} catch (error) {
request.log.error(error);
reply.code(400);
return {}
}
};
Комментарии:
1. Теперь я получаю эту ошибку «ошибка TS2683:» это «неявно имеет тип «любой», потому что у него нет аннотации типа». и «Внешнее значение» это «затенено этим контейнером».
2. Это проблема TS. Я не разработчик машинописных текстов