Я успешно сгенерировал и запустил приложение nodejs с экспресс-генератором. Эта часть в порядке.
Я также создал автономный (единственный файл .js) прототип установки mongoDB (используя mongoose - впервые для меня). OK
Они хорошо выполняют свою работу, но я застреваю, когда объединяю 2.
Я предполагаю, что моя ошибка в заявлениях module.exports, но я не могу понять, как это исправить.
Кто-нибудь может помочь мне переписать это?
nb Я использую "mongoose": "~ 5.3.16", (... если важна версия?)
Мой код (я пропускаю некоторые длинные части):
/ bin / www (для информации, вероятно, не проблема):
var app = require('../app');
var debug = require('debug')('api-dfv2:server');
var http = require('http');
const loadConfig = require('../public/javascripts/loadConfig.js');
const config = loadConfig.getConfig();
var port = normalizePort(config.port);
app.set('port', port);
var server = http.createServer(app);
server.listen(port);
server.on('error', onError);
server.on('listening', onListening);
function normalizePort(val) {(I skip...)
}
function onError(error) {(I skip here some code to handle errors+event listener for http server "listening" event...)
app.js:
var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');
var loadConfig = require('./public/javascripts/loadConfig.js');
var Conversation = require('./src/conversation');//declared but never read probably something wrong there
//the routers we need
var indexRouter = require('./routes/index');
var dfv2Router = require('./routes/dfv2');
//initiate express with moment
var app = express();
//link with moment module
app.locals.moment = require('moment');
// view engine setup
app.set('views', path.join(__dirname, 'views'));
//app.set('view engine', 'jade');>>upgrade to pug
app.set('view engine', 'pug');
app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
//let's load the initial config (or defaults)
//it will exit if no credentials are provided.
loadConfig.setConfig();
/**
* map the routes
*/
app.use('/', indexRouter);
app.use('/dfv2', dfv2Router);
// catch 404 and forward to error handler
app.use(function(req, res, next) {
next(createError(404));
});
// error handler
app.use(function(err, req, res, next) {
// set locals, only providing error in development
res.locals.message = err.message;
res.locals.error = req.app.get('env') === 'development' ? err : {};
// render the error page
res.status(err.status || 500);
res.render('error');
});
module.exports = app;
в dfv2.js я получаю POST-запросы от системы чата и хочу сохранить этот контент в mongoDB:
var express = require('express');
var router = express.Router();
const conversation = require('../src/conversation')
/* POST received from chat system */
router.post('/', function(req, res, next) {
dialogflowv2.getDFResponse(req.body)//I generate the answer to the chat
.then((DFanswer) => {
console.log(JSON.stringify(DFanswer));//not a nice way to debug but it works until that point
var currentConversation = new conversation;
console.log('test5');
currentConversation = {"moment": "test"};//I should write the full mapping with the body etc. here just to test one field
console.log(JSON.stringify(currentConversation));
currentConversation.save() // THIS IS WHERE IT GOES WRONG XXXXXX
//.then(function(tmp) {console.log("ok : ",tmp)})
//.catch(function() {console.log("DB error :")})
res.status(200).json(DFanswer);
})
.catch(err => res.status(400).json(JSON.stringify(err.message)))
})
module.exports = router;
для информации ,ослов.js
var mongoose = require('mongoose');
const server = '127.0.0.1:27017'; // DB SERVER
const database = 'test_laurent'; // DB NAME
mongoose.connect(`mongodb://${server}/${database}`,{useNewUrlParser: true})
.then(() => {
console.log('Database connection successful - system ready')
})
.catch(err => {
console.error('Database connection error')
})
//get mongoose to use the global promise library
mongoose.Promise = global.Promise;
var db = mongoose.connection;
//to bind error of DB with console
db.on('error',console.error.bind(console, 'MongoDB connection error:'));
let mySchema = new mongoose.Schema(
{
body: String,
sessionId: String,
moment: String
})
let conversation = db.model('conversation', mySchema);
module.exports = conversation;
В результате моя БД ничего не получает. Но это хорошо работает, если я возьму весь код разговор.js в качестве отдельного приложения (POST> создать схему> создать объект> object.save> моя коллекция будет создана и видима в Compass, поэтому БД и ее соединение не будут проблемой) ,
заранее спасибо, любая подсказка приветствуется.