У меня проблемы с seneca и seneca-web. Я действительно новичок.Параметры запроса, url и body не слиты правильно в seneca с seneca-web
Это мой код до сих пор:
"use strict";
var express = require('express');
var Web = require("seneca-web");
var bodyParser = require('body-parser')
var plugin = require('./products_actions/products_actions');
module.exports = plugin;
var entities = require('seneca-entity')
var seneca = require('seneca')();
seneca.use(plugin);
seneca.use(entities);
seneca.use('mysql-store', {
name : 'ecrm',
host : 'localhost',
user : 'root',
password : 'ecrm',
port : 3306
})
seneca.ready(function(err) {
var Routes = [ {
pin : 'area:product,action:fetch,criteria:*',
prefix : '/products/fetch',
map : {
byId : {
GET : true,
suffix : "/:id"
}
}
}, {
pin : 'area:product,action:*',
prefix : '/products',
map : {
fetch : {
GET : true
},
add : {
GET : false,
PUT : true
}
}
} ];
var app = express();
app.use(bodyParser.json());
var config = {
routes : Routes,
adapter : require('seneca-web-adapter-express'),
context : app,
options : {
parseBody : false
}
}
seneca.use(Web, config);
app.listen(3000);
});
и вот код, в котором определены Сенека действия:
module.exports = function(options) {
var seneca = this;
// ADD
seneca.add({
area : "product",
action : "add"
}, function(req, done) {
var products = this.make$("prodotti");
var args = req.args.body;
console.log(args);
products.nome = args.nome;
products.categoria = args.categoria;
products.descrizione = args.descrizione;
products.prezzo = args.prezzo;
products.save$(function(err, product) {
done(err, products.data$(false));
});
});
// get by Id , PROBLEM!!!
seneca.add({
area : "product",
action : "fetch",
criteria : "byId"
}, function(req, done) {
console.log("HERE");
var id = req.args.params.id;
var product = this.make("prodotti");
product.load$(id, done);
});
// LIST ALL
seneca.add({
area : "product",
action : "fetch"
}, function(args, done) {
var products = this.make("prodotti");
products.list$({}, done);
});
}
Проблема заключается в обработчике GetByID (маршрут/продукты/извлечения/byId/id_of_the продукта).
Код пока работает, но я хочу получить переменную id, представленную id_of_the продуктом, не выполняющим var id = req.args.params.id; , но я хочу, чтобы он был объединен в объект req, и я хотел бы сделать var id = req.id;
То же самое в обработчике ADD, я сделал var args = req.args.body; но я хотел бы, чтобы тело слилось в объект req, как я видел в книге «Разработка микросервисов в node.js» Дэвида Гонзалеса.
Проблема возникает, когда в обработчике я хочу вызвать другое действие seneca, передающее идентификатор продукта. В этом случае идентификатор доступен для объекта req, а не в параметрах url. Конечно, я мог бы проверить, определена ли переменная в req.args.params, и если она не используется с объектом req, но это не чистое решение.
Возможно ли это с текущей версией seneca и seneca web? Я установил их из npm, и у меня есть следующие версии: seneca 3.2.2 и seneca-web 2.0.0;
Заранее благодарен!
Спасибо! Мне не хватало роли: веб-часть в seneca-web. –