Как использовать MongoDB Stitch в Next.js - PullRequest
0 голосов
/ 10 апреля 2019

Я планировал использовать стежок mongoDB.Но он предоставляет браузер SDK и сервер SDK по-разному.Я попробовал оба из них, и я получаю некоторую ошибку.Я считаю, что это потому, что мое приложение изоморфно, так как я использую Next.js.Пожалуйста, сообщите мне, что я могу сделать в такой ситуации.

Я получил сообщение об ошибке типа self is not defined при использовании mongodb-stitch-browser-sdk

И некоторые проблемы как Module not found: Can't resolve 'fs' при использовании mongodb-stitch-server-sdk .

Пожалуйста, помогите.Я также видел подобный вопрос без ответа на этом сайте, который здесь

1 Ответ

0 голосов
/ 13 мая 2019

Да, это происходит из-за того, что nextjs создает изоморфное приложение. Так что попробуйте создать webhook и либо вызвать api mongodb stitch, либо напрямую использовать сервис из webhook. Вот пример регистрации использования через webhook стежка:

exports = function(payload) {
    const request = EJSON.parse(payload.body.text());
    const http = context.services.get("<app-title>");
    const owner = context.values.get("<username-of-the-app-owner>");
    const apiKey = context.values.get("<api-key>");

    return http.post({
        url: "https://stitch.mongodb.com/api/admin/v3.0/auth/providers/mongodb-cloud/login",
        body: JSON.stringify({
            username: owner,
            apiKey: apiKey
        })
    }).then(response => EJSON.parse(response.body.text()).access_token).then(accessToken => {
        return http.post({
            url: "https://stitch.mongodb.com/api/admin/v3.0/groups/<group-id>/apps/<app-id>/users",
            headers: {
                Authorization: ["Bearer " + accessToken]
            },
            body: JSON.stringify({
                email: request.useremail,
                password: request.userpass
            })
        });
    });
};

Это тот, который использует сервис AWS S3:

exports = function(payload) {
    //base64EncodedImage, bucket, fileName, fileType
    const body = EJSON.parse(payload.body.text());
    // Convert the base64 encoded image string to a BSON Binary object
    const binaryImageData = BSON.Binary.fromBase64(body.picture, 0);
    // Instantiate an S3 service client
    const s3Service = context.services.get('<aws-s3-service-title>').s3('<location>');
    // Put the object to S3
    return s3Service.PutObject({
        'Bucket': '<aws-bucket-title>',
        'Key': body.fileName,
        'ContentType': body.fileType,
        'Body': binaryImageData
    })
        .then(putObjectOutput => {
            // console.log(putObjectOutput);
            // putObjectOutput: {
            //   ETag: <string>, // The object's S3 entity tag
            // }
            return putObjectOutput;
        })
        .catch(console.error);
    // return body;
};
...