Почему я получаю val.slice не является функцией - PullRequest
1 голос
/ 26 февраля 2020

Я реализую веб-приложение с express, используя трехуровневую архитектуру . У меня есть blogposts в качестве ресурса, хранящегося в базе данных mysql. Вот как выглядит таблица:

CREATE TABLE IF NOT EXISTS blogposts (
    blogId INT NOT NULL AUTO_INCREMENT,
    title VARCHAR(255) NOT NULL,
    content VARCHAR(255) NOT NULL,
    posted VARCHAR(255) NOT NULL,
    imageFile VARCHAR(255) NOT NULL,
    userId INT NOT NULL,
    CONSTRAINT blog_id PRIMARY KEY (blogId),
    CONSTRAINT id_fk FOREIGN KEY (userId) REFERENCES accounts(personId)
);

Теперь я хочу получить идентификатор поста блога sp. Я отправляю запросы в базу данных на уровне доступа и экспортирую функцию следующим образом. :

exports.getBlogpostId = function(blogId ,callback){

    const query = "SELECT * FROM blogposts WHERE blogId = ?"
    const value = [blogId]
    db.query(query, value, function(error, blogpost){
        if(error){
            callback("DatabaseError", null)
        }else{
            callback(null, blogpost)
        }
    })
}

Затем я использую его в своем слое business-logi c :

exports.getBlogpostId = function(callback){
    blogRepo.getBlogpostId(function(blogpost, error){
        callback(error, blogpost)
    })
}

Затем, наконец, я использую его в презентации layer :

router.get("/:blogId", function(request, response){

    const blogId = request.params.blogId
    blogManager.getBlogpostId(blogId, function(error, blogpost){

        const model = {
            error: error,
            blogpost: blogpost[0]
        }
        response.render("blogpost.hbs", model)
    })
})

Когда я пытаюсь получить идентификатор, я получаю следующую ошибку:

TypeError: val.slice is not a function
      at escapeString (/web-app/node_modules/sqlstring/lib/SqlString.js:202:23)
      at Object.escape (/web-app/node_modules/sqlstring/lib/SqlString.js:56:21)
      at Object.format (/web-app/node_modules/sqlstring/lib/SqlString.js:100:19)
      at Connection.format (/web-app/node_modules/mysql/lib/Connection.js:271:20)
      at Connection.query (/web-app/node_modules/mysql/lib/Connection.js:189:22)
      at Object.exports.getBlogpostId (/web-app/src/dal/blog-repository.js:19:8)
      at Object.exports.getBlogpostId (/web-app/src/bll/blog-manager.js:12:14)
      at /web-app/src/pl/routers/blogRouter/blogRouter.router.js:39:17
      at Layer.handle [as handle_request] (/web-app/node_modules/express/lib/router/layer.js:95:5)
      at next (/web-app/node_modules/express/lib/router/route.js:137:13)

Я нигде не вызываю метод слайса, поэтому я не знаю почему возникает эта ошибка?

РЕДАКТИРОВАТЬ: Обнаружил проблему, я забыл добавить blogId в качестве параметра в слой business-logi c!

Спасибо в заранее!

1 Ответ

1 голос
/ 26 февраля 2020

глядя на ошибку, эта ошибка исходит от модуля sqlstring, а наиболее локальная вещь - от /web-app/src/pl/routers/blogRouter/blogRouter.router.js:39:17, так что вам придется взглянуть на нее здесь

...