Я использую NodeJS/Express в сочетании с jquery на стороне клиента. На стороне клиента я не хочу отправлять json-объект серверу NodeJS/Express для дальнейшей обработки. Но вместо этого я получил следующее сообщение в протоколирования Node:NodeJS не отвечает на сообщение AJAX
POST /BusinessRules/findApiData 500 43.905 ms - 151
Что я ожидаю является сообщение «Hello World» из функции exports.findApiData в index.js.
Пожалуйста, помогите мне понять и исправить эту проблему!
На сервере NodeJS я использую следующие файлы:
- Router.js (для настройки маршрутов, здесь также вызов функции в пределах index.js)
- App.js (конфигурация)
- 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 [Изменено]
'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);
});
Ваш сервер не отвечает на ваш маршрут '/ BusinessRules/findApiData', поэтому следует ожидать, что клиент ничего не получит. Вы говорите, что даже не видите 'console.log()' на сервере? Если вы ожидаете ответа клиента, вам понадобится 'res.send (...)' или 'res.json (...)' или какой-то ответ в вашем обработчике маршрутов. – jfriend00
Почему вы еще не ответили на уточняющий вопрос? Когда вы отправляете вопрос, пожалуйста, держитесь и проверяйте несколько раз, чтобы узнать, запущены ли люди по вашему вопросу, и вы можете помочь его прояснить. В противном случае те люди, которые пришли, чтобы попытаться помочь, просто исчезнут к моменту вашего возвращения и ответят на их уточняющие вопросы. У вас гораздо больше шансов получить своевременный ответ, если вы своевременно отвечаете на вопросы о своем вопросе. Вот как работает этот сайт. Это отличается от форума, на котором вы отбрасываете вопрос и возвращаетесь на следующий день. – jfriend00
Спасибо за быстрый ответ. Я попытался использовать res.send («Hello World»); Но все равно я не получил ответа –