2016-03-22 12 views
0

NodeJS/Expressをクライアント側のjqueryと組み合わせて使用​​しています。クライアント側では、NodeJS/Expressサーバーにjsonオブジェクトを送信して処理することを忘れてしまいました。しかし、その代わりに、私はノードのログに次のメッセージだ:私は期待して何NodeJSがAJAXポストで応答しない

POST /BusinessRules/findApiData 500 43.905 ms - 151 

はindex.jsの関数exports.findApiDataからのメッセージ「Hello World」のです。

この問題を理解して解決するのを手伝ってください。

  • Router.js(ここもindex.js内の関数を呼び出しているでセットアップのルート、)
  • App.js(設定:私は、次のファイルを使用しNodeJSサーバーで

    クライアント側で)

  • BusinessRules/index.js(取り扱いリクエストページ要求)

function getNewValue(t,e){ 

if (e.keyCode == 13){ 
    newValue = '{"_id": "' + id + '","' + $th + '": "' + t.ltrim() + "}'; 
    var jsonNewValue = JSON.parse(newValue); 
    $.ajax({ 
      url:'/BusinessRules/findApiData', 
      type:'POST', 
      contentType: 'application/json', 
        data: jsonNewValue }); 
      } 
} 

Router.js

app.post('/BusinessRules/findApiData', require('./views/BusinessRules/index').findApiData); 

index.js [EDITED}

'use strict' 
exports.find = function(req, res, next){ 
    console.log("find"); 
    req.query.lookupValue = req.query.lookupValue ? req.query.lookupValue : ''; 
    req.query.limit = req.query.limit ? parseInt(req.query.limit, null) : 20; 
    req.query.page = req.query.page ? parseInt(req.query.page, null) : 1; 
    req.query.sort = req.query.sort ? req.query.sort : '_id'; 

    var filters = {}; 
    if (req.query.lookupValue) { 
     filters.lookupValue = new RegExp('^.*?'+ req.query.lookupValue +'.*$', 'i'); 
    } 

    req.app.db.models.BusinessRules.pagedFind({ 
     filters: filters, 
     keys: 'lookupValue tagCattegory tagScore typeBusinessRule _id', 
     limit: req.query.limit, 
     page: req.query.page, 
     sort: req.query.sort 
    }, function(err, results) { 
     if (err) { 
      return next(err); 
     } 

     if (req.xhr) { 
      res.header("Cache-Control", "no-cache, no-store, must-revalidate"); 
      results.filters = req.query; 
      console.log("Results XHR "); 
      res.send(results); 
      res.json(results); 
     } 
     else { 
      results.filters = req.query; 
      //res.json(results); 
      console.log("Results No XHR "); 
      //console.log(results); 
      res.render('BusinessRules/index', { data: results.data }); 


     } 

    }); 
}; 

exports.read = function(req, res, next){ 
    req.app.db.models.BusinessRules.findById(req.params.id).exec(function(err, BusinessRules) { 
     if (err) { 
      return next(err); 
     } 

     if (req.xhr) { 
      res.send(BusinessRules); 
     } 
     else { 
      res.render('BusinessRules/details', { BusinessRules: BusinessRules }); 
     } 
    }); 
}; 

exports.add = function(req, res){ 
    res.render('BusinessRules/add'); 
}; 

exports.create = function(req, res, next) { 
    console.log('START POST: '); 
    var workflow = req.app.utility.workflow(req, res); 

    workflow.on('validate', function() { 
     console.log('START POST(1) IF FORM CHECK: '); 
     if (!req.body.lstTypeBusinessRule) { 
      workflow.outcome.errors.push('Please enter a TypeBusinessRule.'); 
      console.log('TypeBusinessRule niet gevuld'); 
      return workflow.emit('response'); 
     } 
     workflow.emit('createBusinessRule'); 
    }); 

    workflow.on('createBusinessRule', function() { 
     console.log('STAR POST (3):Worflow On:'); 
     var fieldsToSet = { 
      typeBusinessRule: req.body.lstTypeBusinessRule, 
      lookupValue: req.body.txtLookupValue, 
      tagCattegory: req.body.txtTagCattegory, 
      tagScore: req.body.txtTagScore, 
      creationDate: Date() 
     }; 
     console.log(fieldsToSet); 

     req.app.db.models.BusinessRules.create(fieldsToSet, function(err, BusinessRule) { 
      if (err) { 
       return workflow.emit('exception', err); 
      } 

      workflow.outcome.record = BusinessRule; 
      // req.flash('success','BusinessRule Added'); 
      res.location('/BusinessRules'); 
      res.redirect('/BusinessRules'); 
     }); 
    }); 
    workflow.emit('validate'); 
}; 

exports.findApiData = function (req, res, next) { 
    console.log("Hallo Erik"); 
    res.send("Hello World"); 
}; 

App.js [EDITED]

'use strict'; 

//dependencies 
var config = require('./config'), 
    express = require('express'), 
    cookieParser = require('cookie-parser'), 
    bodyParser = require('body-parser'), 
    session = require('express-session'), 
    mongoStore = require('connect-mongo')(session), 
    http = require('http'), 
    path = require('path'), 
    passport = require('passport'), 
    mongoose = require('mongoose'), 
    helmet = require('helmet'); 
// csrf = require('csurf'); 

//create express app 
var app = express(); 

//keep reference to config 
app.config = config; 

//setup the web server 
app.server = http.createServer(app); 

//setup mongoose 
app.db = mongoose.createConnection(config.mongodb.uri); 
app.db.on('error', console.error.bind(console, 'mongoose connection error: ')); 
app.db.once('open', function() { 
    //and... we have a data store 
}); 

//config data models 
require('./models')(app, mongoose); 

//settings 
app.disable('x-powered-by'); 
app.set('port', config.port); 
app.set('views', path.join(__dirname, 'views')); 
app.set('view engine', 'jade'); 

//middleware 
app.use(require('morgan')('dev')); 
app.use(require('compression')()); 
app.use(require('serve-static')(path.join(__dirname, 'public'))); 
app.use(require('method-override')()); 
app.use(express.static('public')); 
app.use(bodyParser.json()); 
app.use(bodyParser.json({ type: 'application/vnd.api+json' })); // parse application/vnd.api+json as json 
app.use(bodyParser.urlencoded({ extended: true })); 
app.use(cookieParser(config.cryptoKey)); 
app.use(session({ 
    resave: true, 
    saveUninitialized: true, 
    secret: config.cryptoKey, 
    store: new mongoStore({ url: config.mongodb.uri }) 
})); 
app.use(passport.initialize()); 
app.use(passport.session()); 
//app.use(csrf({ cookie: { signed: true } })); 
helmet(app); 

//response locals 
app.use(function(req, res, next) { 
// res.cookie('_csrfToken', req.csrfToken()); 
    res.locals.user = {}; 
    res.locals.user.defaultReturnUrl = req.user && req.user.defaultReturnUrl(); 
    res.locals.user.username = req.user && req.user.username; 
    next(); 
}); 

//global locals 
app.locals.projectName = app.config.projectName; 
app.locals.copyrightYear = new Date().getFullYear(); 
app.locals.copyrightName = app.config.companyName; 
app.locals.cacheBreaker = 'br34k-01'; 

//setup passport 
require('./passport')(app, passport); 

//setup routes 
require('./routes')(app, passport); 

//custom (friendly) error handler 
app.use(require('./views/http/index').http500); 

//setup utilities 
app.utility = {}; 
app.utility.sendmail = require('./util/sendmail'); 
app.utility.slugify = require('./util/slugify'); 
app.utility.workflow = require('./util/workflow'); 

//listen up 
app.server.listen(app.config.port, function(){ 
    //and... we're live 
    console.log('Server is running on port ' + config.port); 
}); 
+1

サーバーはあなたの '/ BusinessRules/findApiData'ルートに応答を送信しないので、クライアントは何も返さないと予想されます。サーバ上で 'console.log()'が見えないと言っていますか?クライアントからの応答が必要な場合は、ルート・ハンドラに 'res.send(...)'や 'res.json(...)'や何らかの応答が必要です。 – jfriend00

+0

明確な質問にまだ回答していないのはなぜですか?あなたが質問を投稿するときには、あなたの質問で人々が混乱しているかどうかを確認するために何回も立ち往生してチェックしてください。さもなければ、あなたが帰ってきたときに助けに来てくれた人たちは、あなたの明確な質問に答えるだけで済むでしょう。あなたは、あなたの質問に関する質問に時宜を得て答えると、時宜を得た答えを得る可能性がはるかに高いです。それがこのサイトの仕組みです。それはあなたが質問を取り除き、翌日に戻ってくるフォーラムとは異なります。 – jfriend00

+0

速い返答をありがとう。 res.send( 'Hello World')を使用しようとしました。しかし、まだ私は応答がありません –

答えて

0

解決策

コメントのおかげで、私はJSONオブジェクトを文字列化してこの問題を解決しました。それがなぜ必要なのかわかりません。しかし、それは動作します。

function getNewValue(t,e){ 

if (e.keyCode == 13){ 
    newValue = '{"_id": "' + id + '","' + $th + '": "' + t.ltrim() + "}'; 
    var jsonNewValue = JSON.parse(newValue); 
    $.ajax({ 
      url:'/BusinessRules/findApiData', 
      type:'POST', 
      contentType: 'application/json', 
        data: JSON.stringify(jsonNewValue)}); 
      } 
}