ウェブサイト検索

jquery - TypeScriptでコーディングされたNodeJSサーバーからJSONデータを返すことができない


私のプロジェクトでは、バックエンドに NodeJS + Express があり、JQuery を使ったフロントエンドに POST レスポンスとして JSON データを返す必要があります。なぜかメッセージがフロントエンドに届きません。フロントエンドでは JQuery の AJAX 呼び出しを使用しています。どこで問題が発生しているのか完全には確かではありません。というのも、フロントエンドのコードでは呼び出しが成功しても失敗してもアラートメッセージを表示するはずですが、メッセージが表示されないからです。

サーバー:

// <reference path="lib/Main.d.ts" />

import express = require('express');
import http = require('http');
import path = require('path');
import fs = require('fs');

var routes = require('./routes');
var user = require('./routes/user');
var formidable = require('formidable');

var app = express();
app.use(express.logger());

// all environments

app.set('port', process.env.PORT || 8080);
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');
app.use(express.favicon());
app.use(express.logger('dev'));
app.use(express.json());
app.use(express.urlencoded());
app.use(express.methodOverride());
app.use(express.cookieParser('your secret here'));
app.use(express.session());
app.use(app.router);
app.use(express.static(path.join(__dirname, 'public')));


/**
 * Receives JSON Data
 */

app.post("/data", function (request, response){
    console.log("Body called");
    var x = String(request.body.test);
    console.log(x);
    console.log("Sending response");
    var resp = "Received " + x;
    response.send(JSON.stringify({
        message : resp
    }));
});

クライアント:

function start() {
     send({
        test: 123
    },function test(responseData){
            alert(responseData);
        }
    )
}


function send(data : any, success:(String) => void){
    $.ajax({
        type: 'POST',
        data: JSON.stringify(data),
        contentType: 'application/json',
        url: '/data',
        success: function (responseData) {
            var x = JSON.parse(responseData);
            alert("success");
            success(x.body.message);
        },
        error: function(err){
            alert("failure");
            var e = serverCommunicationFailureError();
            e.displayErrorMessage();
        }
    });
}

コンソールメッセージ:

Body called
123
Sending response

回答 #1

あなたのコードには含まれています

return JSON.parse(responseData);
alert("success");

もしそれが return 文の後にある場合、どのようにして alert の呼び出しに到達できると思いますか?

回答 #2

body-parser を使って JSON データを解析することができます

import bodyParser from "body-parser";
import express from "express"


const app = express()

app.use(bodyParser.json(options));

// You can replace these options with the available options
// available options are

// - limit
// - revived
// - inflate
// - strict
// - type
// - verify

// example

app.use(bodyParser.json({ limit: "10mb" }));