1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/qkongtao-mt-app

В этом репозитории не указан файл с открытой лицензией (LICENSE). При использовании обратитесь к конкретному описанию проекта и его зависимостям в коде.
Клонировать/Скачать
README.md 16 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
Отправлено 04.06.2025 17:14 1a78b88

Демонстрационный проект http://mt-app.qkongtao.cn

Описание проекта

Передняя часть: Nuxt.js/vue-router/Vuex/Element-ui Задняя часть: Node.js/Koa2/Koa-router/Nodemailer/Passport HTTP-коммуникация: Axios Поддержка данных: Mongoose/Redis/Веб-сервисы API карт Google# Структура проекта

components
         changeCity                  -->Страница выбора города
             iselect.vue             -->Выбор по провинциям и т. д.
             hot.vue                 -->Страница с популярными городами
             categroy.vue            -->Выбор по начальной букве китайского алфавита
         products                    -->Страница с продуктами, результат поиска
             categroy.vue            -->Категории и регионы
             crumbs.vue              -->Meituan Ганьчжоу > Ганьнанский апельсин
             iselect.vue             -->Категории и регионы, правая часть
             list.vue                -->
             product.vue             -->
         detail                      -->Страница с деталями продукта
             crumbs.vue              -->
             item.vue                -->
             list.vue                -->
             summary.vue             -->
         index
             artistic.vue            -->Нижняя часть страницы, "Эстетика"
             life.vue                -->Центральная часть, включает слайдер, почти вся часть изображений
             menu.vue                -->Все категории
             silder.vue              -->Отдельный слайдер, используется в life.vue
         public
             header                  -->Верхняя часть, включая поисковую строку
                 index.vue           -->Для экспорта компонентов из header
                 nav.vue             -->Правый верхний угол, "Мой Meituan", навигация по URL
                 searchbar.vue       -->Полностью поисковая строка
                 topbar.vue          -->Вся верхняя часть, кроме поисковой строки
                 user.vue            -->Часть для входа и регистрации пользователя
                 geo.vue             -->Левый верхний угол, смена города
 ```             footer                  
                 index.vue           -->Нижняя часть
     pages
         index
```vue                   -->Центральная часть
             register.vue                -->Регистрационный компонент
             login.vue                   -->Входной компонент
             exit.vue                    -->Выходной компонент
             register.vue                -->Регистрационный компонент
             changeCity                 -->Компонент выбора города
             products.vue                -->Страница с перечнем товаров
             detail.vue                  -->Страница с деталями товара
         layout
             default.vue                 -->Страница с конечным отображением
             blank.vue                   -->Шаблонный файл для размещения register.vue, login, exit
         server
             dbs
                 models                  -->Файлы для размещения данных базы данных
                     user.js             -->Таблица users (включает username, password, email)
                     category.js
                     city.js
                     menu.js
                     poi.js
                     province.js
                 config.js               -->Файл конфигурации базы данных (smtp-сервер, redis-соединение, mongodb-соединение)
             interface
                 utils
                     axios.js            -->Определение параметров конфигурации axios
                     passport.js         -->Использование koa-passport для упрощенного реализации входа и регистрации (сериализация, десериализация, локальная стратегия)
                 users.js                -->Определение серийных интерфейсов входа (вход, выход, получение имени пользователя, регистрация, проверка и т. д. )
                 geo.js                  -->определение серийных интерфейсов города (получение всех городов, популярных городов, получения провинций и т. д.)
             index.js                    -->определение файлов интерфейсов поддерживаемых сервисов (passport, сессии, маршруты, база данных, обработка POST-запросов и т. д.)
         store 
             modules                     -->вложенные модули vuex
                 geo.js                   -->текущий город
                 home.js                  -->подробные категории всех категорий
             index.js                    -->модуль vuex (сборка вложенных модулей и определение некоторых операций)
       запуск redis -> найти папку установки (develop) -> redis-server
        запуск mongoose -> найти папку установки (develop) -> mongod        логика оплаты находится в разделе 13-1, 7.06, можно самостоятельно написать

       nuxt.config.js          файл конфигурации: можно импортировать необходимые файлы проекта, такие как файлы CSS, а также настроить другие файлы


# Реализованные функции
1. Регистрация и вход, автоматическая отправка кода подтверждения на почту QQ
2. Смена города: обновление информации для разных городов
3. Поиск: поиск по ключевым словам для текущего города с использованием POI
4. Автоматическая геолокация с использованием карт Google Maps

# Установка проекта
Сначала установите npx
`npm install -g npx`
Затем используйте npx для установки шаблона
`npx create-nuxt-app project_name`
Перейдите в эту директорию и запустите
`cd mt-app`
`npm run dev`

**Из-за невозможности использования команды import**
1. Используйте babel-node для запуска
Добавьте --exec babel-node в компиляции в package.json

"dev": "cross-env NODE_ENV=development nodemon server/index.js --watch server --exec babel-node", "build": "nuxt build", "start": "cross-env NODE_ENV=production node server/index.js --exec babel-node",

2. Создайте файл .babelrc в корневой директории

{ "presets":["es2015"] }

3. Установите соответствующие плагины
`cnpm i babel-core babel-preset-es2015 babel-cli`
Теперь можно использовать import для импорта файлов, и проект запустится успешно

**Использование sass**
`cnpm i sass-loader node-sass`

Требования к проекту:
1. Экономия сетевых запросов
2. Семантическая разметка
3. Минимизация DOMВстреченные проблемы:
1. При использовании setTimeout в Vue-проекте и вызове this.add() внутри, появляется ошибка "this.add не является функцией". При использовании setTimeout this указывает на window, а не на объект data, почему это происходит? **Потому что код, запущенный внутри setTimeout, выполняется в новом контексте выполнения, который не имеет доступа к this объекта Vue.**

Решение: Используйте стрелочную функцию для функции внутри setTimeout;

или сохраните this из data в переменной _this=_this;

**Импорт данных в базу**
mongoimport -d dbs -c test pois.dat

**ssr**: Серверная генерация контента, когда исходный код сервера отображается напрямую на веб-странице, без необходимости для повторной генерации

**библиотека для китайских иероглифов**
может быть использована для преобразования китайских иероглифов в пиньинь
npm i js-pinyin

**сортировка массива по первым буквам элементов**
Если нужно отсортировать массив по другим критериям, нужно предоставить функцию сравнения, которая сравнивает два значения и возвращает число, которое указывает на относительный порядок этих значений. Функция сравнения должна иметь два параметра a и b, и её возвращаемое значение должно быть следующим:если a меньше b, в отсортированном массиве a должен предшествовать b, возвращается число меньше нуля.
если a равно b, возвращается 0.
если a больше b, возвращается число больше нуля.
`blocks.sort((a, b) => a.title.charCodeAt(0) - b.title.charCodeAt(0));`**Изменение структуры отображения JSON-данных и шаблоны — это очень болезненный процесс****Разработка умной сортировки продуктов потребует повторной реализации**

JavaScript для проверки, находится ли элемент в области видимости
```js
function isInViewPortOfOne (el) {
    const viewPortHeight = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight; //Высота области видимости
    const offsetTop = el.offsetTop; //Высота верхней границы элемента
    const offsetHeight = el.offsetHeight; //Высота элемента
    const scrollTop = document.documentElement.scrollTop; //Расстояние прокрутки
    //Проверка, находится ли элемент в области видимости
    const top = (offsetTop + offsetHeight) - scrollTop;
    if (top > 0 && top < viewPortHeight) {
        return true;
    } else {
        return false;
    }
}

Как реализовать автоматическую геолокацию на карте 380+170 Пройдите по списку от начала до элемента с scrollTop большим, чем текущий, и верните его. Сохраните первый элемент с scrollTop большим, чем текущий, в vuex. Затем следите за прокруткой, отслеживая изменения point, и создайте point в группе map, а затем обновите карту.

Маршрутизация: Корзина не существует до тех пор, пока пользователь не добавит товар в корзину, нажав на кнопку "Купить" на странице товара.

Получение комментариев других пользователей может привести к судебному разбирательству

Главная

Программная навигация и передача параметров маршрутизации

this.$router.push({
    path: "/",
    query: { name: name }
});
//Получение параметров
this.$router.push(`/products?keyword=${this.$route.query.name}`);
```# Пакетирование и развертывание
`npm run build`
Необходимые для загрузки файлы
1. .nuxt директория

2. package.json

3. nuxt.config.js

4. static

5. server директория 

## После загрузки
1. Установка зависимостей (необходимо установить PM2, который включает node)
npm install
2. Создание скрипта для автоматического запуска, содержимое следующее
Создайте файл pm2.json в корневой директории проекта

[ { "name": "mt-app", "script": "npm run server", "env_dev": { "NODE_ENV": "development" }, "env_production": { "NODE_ENV": "production" } } ]

3. Использование PM2 для управления запуском проекта
Перейти в корневую директорию проекта
Запустить проект с помощью pm2 pm2.json
Обнаружено, что проект запущен на локальном сервере http://localhost:3000
Но не отображается в интернете, поэтому используется доменное имя для доступа
4. Использование Nginx для конфигурации маршрутизации
Добавить в nginx.conf

upstream nodenuxt { server 127.0.0.1:3000; # nuxt проект прослушивает порт keepalive 64; } server { # Необходимые для маршрутизации порт и доменное имя listen 80; server_name **************.cn;

после настройки было обнаружено, что доступ по доменному имени работает корректно, но возникла проблема с кросс-доменным доступом к ресурсам.
5. В конфигурационном файле nuxt.config.js выполните следующие настройки

/* ** Nuxt.js модули */ modules: [ '@nuxtjs/axios', '@nuxtjs/proxy' ], proxy: [ [ '/api', { target: 'http://cp-tools.cn/', // api-хост pathRewrite: { '^/api': '/' } } ] ],


Использование прокси-интерфейса для получения ресурсов решает проблему кросс-доменного доступа


Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/qkongtao-mt-app.git
git@api.gitlife.ru:oschina-mirror/qkongtao-mt-app.git
oschina-mirror
qkongtao-mt-app
qkongtao-mt-app
master