J'ai le fichier app.js suivant pour gérer un point de terminaison spécifique:

const express = require('express');

const app = express();

app.use((req, res, next) => {
    !process.env.HTTP_ACCESS_IP || res.setHeader('Access-Control-Allow-Origin', process.env.HTTP_ACCESS_IP);
    res.setHeader(
        'Access-Control-Allow-Headers',
        'Origin, X-Requested-With, Content-Type, Accept, Authorization'
    );
    res.setHeader(
        'Access-Control-Allow-Methods',
        'GET, POST, PATCH, PUT, DELETE, OPTIONS',
    );
    next();
});

app.use(express.json({ limit: '50mb' }));
app.use(express.urlencoded({ limit: '50mb', extended: true }));

app.post('/api/verificationstart', (req, res) => {
    return res.status(400).send({ message: 'TEST' });
})

module.exports = app;

Je suis côté client, j'envoie HTTP REQUEST au point de terminaison ci-dessus, puis code res.json().

async function fetchApi() {
  return fetch('...', {
    method: 'POST',
    referrerPolicy: 'no-referrer',
  });
}

async function verificationStartApi(data) {
  const res = await fetchApi();
  if (res._bodyText || res._bodyInit) {
    return res.json();
  } else {
    return res;
  }
}

Le problème est que, à partir de res.json(), j'aimerais obtenir un objet string, pas un JSON. Comment pourrais-je le faire? Pour que le résultat de res.json() soit "{ message: 'TEST' }".

Notez que je veux une solution dans le backend. Je ne peux pas toucher le côté client.

J'ai essayé n'importe quoi dans le backend en utilisant res.send() mais rien n'a fonctionné:

res.send('"{ "message": "string" }"');
res.send('{ message: "test" }');
res.send('{ "message": "test" }');
-1
Tal Rofe 9 déc. 2020 à 15:58

3 réponses

Meilleure réponse

Vous pouvez utiliser double JSON.stringify.

app.post('/api/verificationstart', (req, res) => {
    // it will be res.send('"{\\"message\\":\\"TEST\\"}"')
    res.send(JSON.stringify(JSON.stringify({ message: 'TEST' }))) 
})
1
Jack Yu 9 déc. 2020 à 13:38

Envoyez une chaîne valide JSON. Supposons que ce soit votre API.

app.post('/api/verificationstart', (req, res) => {
    return res.status(400).send(JSON.stringify("{ message: 'TEST' }"));
})

res.send(JSON.stringify('{ "message": "test" }'));.

ÉDITER:

Comprenez ce que vous voulez dire. entourez le JSON Stringified dans une chaîne. Jetez un œil à ma mise à jour, testez-la.

0
kg99 9 déc. 2020 à 13:27

Voici donc la réponse la plus moche:

    return res.send('"{ \\"message\\": \\"string\\" }"');
1
Tal Rofe 9 déc. 2020 à 13:36
65217241