如何在Node JS中使用服务层

时间:2019-02-09 09:31:32

标签: node.js express sequelize.js

我是Node js的新手。我已经为我的申请使用了express和sequelize。

这是我的路由器功能。

router.post('/add-merchant', [
    check('name').not().isEmpty(),
    check('city').not().isEmpty(),
    check('state').not().isEmpty(),
    check('country').not().isEmpty(),
], (req, res, next) => {
    try {
        const errors = validationResult(req);

        if (!errors.isEmpty()) {
            return res.json({ errors: errors.array()});
        }

        var merchant = merchantService.addMerchant(req);
        return res.json(merchant)
    } catch (error) {
        return res.json({"status": "error", "message": error.message})
    }
});

我已经创建了名为mercerService.js的文件

我已经添加了用于在商人服务.js中插入数据的代码,并尝试过这样

var merchant = merchantService.addMerchant(req);

但是我无法从商家服务获得任何数据。这是我的商家服务代码

var models = require(“ ../ models”);

var merchantService = {
    addMerchant: (req) => {
        models.merchants.create(req.body).then((merchant) => {
            return merchant.dataValues
        });
    }
}

module.exports = merchantService;

我找不到问题。请帮助任何人解决此问题。

预先感谢

1 个答案:

答案 0 :(得分:1)

您正在以同步方式管理异步任务,该任务不起作用。

您应该以这种方式更改请求处理程序:

CREATE FUNCTION [dbo].[fn_string_split](@str       NVARCHAR(MAX), 
                                        @delimiter NVARCHAR(255))
RETURNS TABLE
AS
     RETURN
     WITH a
          AS (SELECT CAST(0 AS BIGINT) AS idx1, 
                     CHARINDEX(@delimiter, @str) idx2
              UNION ALL
              SELECT idx2 + 1, 
                     CHARINDEX(@delimiter, @str, idx2 + 1)
              FROM a
              WHERE idx2 > 0)
          SELECT SUBSTRING(@str, idx1, COALESCE(NULLIF(idx2, 0), LEN(@str) + 1) - idx1) AS value, 
                 ROW_NUMBER() OVER(
                 ORDER BY idx1) RN
          FROM a;

并按以下方式修复您的商家服务(请参见DECLARE @Invoices AS TABLE (InvoiceNumber NVARCHAR(50), ProductIDCSV NVARCHAR(MAX) ); INSERT INTO @Invoices VALUES ('123','Prod123,Prod456,Prod789'), ('456','Prod987,Prod654,Prod321'); SELECT I.*, P.Value AS ProductID FROM @Invoices I CROSS APPLY dbo.fn_string_split(I.ProductIDCSV, ',') P; 值以启动承诺链):

router.post('/add-merchant', [
  check('name').not().isEmpty(),
  check('city').not().isEmpty(),
  check('state').not().isEmpty(),
  check('country').not().isEmpty(),
], (req, res, next) => {
  try {
    const errors = validationResult(req);

    if (!errors.isEmpty()) {
      return res.json({ errors: errors.array() });
    }

     merchantService.addMerchant(req).then((merchant)=>{
      res.json(merchant)
    })
  } catch (error) {
    return res.json({ "status": "error", "message": error.message })
  }
});