Nuxt3 — это внутренний интерфейс, основанный на H3.
Nuxt3 — это внутренний интерфейс, основанный на H3.

Интерфейс реализации Nuxt3

Nuxt3 использует узел для рендеринга страниц SSR и поставляется с H3 для обработки интерфейса.

Nuxt3 Автоматическое сканирование ~/server/api,~/server/routes,~/server/middlewareФайлы в каталоге для регистрации соответствующего интерфейса

Структура каталогов

Прямо сейчас Структура каталоговдля↓,доступ/api/login Это возвращаемое содержимое интерфейса

Здесь следует отметить, что если мы используем прокси и используем nuxt3 для записи интерфейса, мы не можем использовать api в качестве имени прокси при проксировании, иначе доступ будет проксироваться на соответствующий адрес.

Язык кода:txt
копировать
|-- server
    |-- api //Имя по умолчанию не может быть изменено
        |-- login.post.ts //опубликовать и получить имя файла Представляет тип полученного запроса.
        |-- userInfo.get.ts // здесь представляет собой запрос на получение
        |-- detail
            |--[id].get.ts  //С динамической маршрутизацией Метод передачи параметров вводит параметры

userInfo.get.ts

Язык кода:txt
копировать
// Исправлен возврат метода defineEventHandler.
export default defineEventHandler(event => {
    // Принятые события Содержит узел запрос и метод разрешения
  const query = getQuery(event) // getQuery — это глобальный метод, который можно вызывать напрямую.
  const { id } = query
  return {
    msg: `Запрос Личная информация ${id}`
  }
})

Проекты, работающие в настоящее время Открыть напрямую http://localhost:3000/api/userInfo?id=23Содержимое страницы

Язык кода:txt
копировать
{
    msg: `Запрос 23 личная информация`
}

login.post.ts

Язык кода:txt
копировать
// Исправлен возврат метода defineEventHandler.
export default defineEventHandler(async event => {
  const body = await readBody(event) //readBody — это глобально инкапсулированный метод получения тела
  const { username, password } = body
  //Определяем параметры, которые нужно передать Данные пусты, и сообщается об ошибке.
  if (!username || !password) {
    // createError может напрямую выдавать ошибки
    throw createError({
      statusCode: 400,
      statusMessage: «Имя пользователя и пароль не могут быть пустыми»
    })
  }
  //Операции с базой данных
  return {
    mes: `Данные ${username} успешно сохранены, вход выполнен успешно`
  }
})

page/login.vue

Вот страница входа, написанная в том же проекте для проверки некоторых функций этого запроса.

(elementplus прописан в плагине проекта) и может использоваться напрямую.

Язык кода:txt
копировать
<template>
  <div class="mod-login">
    <el-form
      ref="ruleFormRef"
      :model="ruleForm"
      :rules="rules"
      label-width="120px"
      class="demo-ruleForm"
      :size="formSize"
      status-icon
    >
      <el-form-item label="User Name" prop="name">
        <el-input v-model="ruleForm.name" placeholder="Please User Name" />
      </el-form-item>
      <el-form-item label="Password" prop="name">
        <el-input
          v-model="ruleForm.password"
          type="password"
          placeholder="Please input password"
          show-password
        />
      </el-form-item>
      <el-form-item>
        <el-button type="primary" @click="submitForm(ruleFormRef)"> Create </el-button>
        <el-button @click="resetForm(ruleFormRef)">Reset</el-button>
      </el-form-item>
    </el-form>
  </div>
</template>

<script setup lang="ts">
import { reactive, ref } from 'vue'
import type { FormInstance, FormRules } from 'element-plus'

interface RuleForm {
  name: string
  password: string
}

const formSize = ref('default')
const ruleFormRef = ref<FormInstance>()
const ruleForm = reactive<RuleForm>({
  name: '',
  password: ''
})

const rules = reactive<FormRules<RuleForm>>({
  name: [
    { required: true, message: 'Please input username', trigger: 'blur' },
    { min: 3, max: 5, message: 'Length should be 3 to 5', trigger: 'blur' }
  ],
  password: [
    { required: true, message: 'Please input password', trigger: 'blur' },
    { min: 8, max: 15, message: 'Length should be 8 to 15', trigger: 'blur' }
  ]
})

const submitForm = async (formEl: FormInstance | undefined) => {
  if (!formEl) return
  await formEl.validate(async (valid, fields) => {
    if (valid) {
      const { data } = await useLazyFetch('/api/login', {
        method: 'post',
        body: JSON.stringify({
          // параметры запроса публикации
          username: ruleForm.name,
          password: ruleForm.password
        })
      })
    } else {
      console.log('error submit!', fields)
    }
  })
}

const resetForm = (formEl: FormInstance | undefined) => {
  if (!formEl) return
  formEl.resetFields()
}
</script>

<style lang="scss">
.mod-login {
  padding: 300px;
}
</style>

Возвращаемый контент, напечатанный здесь, — это контент, возвращаемый запросом интерфейса.

Язык кода:txt
копировать
{
    "__v_isShallow": false,
    "__v_isRef": true,
    "_rawValue": {
        "mes": «Данные sejas успешно сохранены, вход выполнен успешно»
    },
    "_value": {
        "mes": «Данные sejas успешно сохранены, вход выполнен успешно»
    }
}

[id].get.js

здесь Если наш запрос должен быть http://localhost:3000/api/detail/8788

Язык кода:txt
копировать
export default defineEventHandler(event => {
  // здесь прошел event.context.params.id, чтобы получить идентификатор ценить
  const id = event.context.params?.id
  return {
    msg: `Запрос Подробная информация о ${id}`
  }
})

Узел может напрямую подключаться к базе данных в качестве внутреннего интерфейса. Вы также можете использовать узел в качестве среднего уровня для запроса других интерфейсов на сервере, обработки данных и возврата их на страницу.

существовать Сервер инициирует запрос, используя$fetchвместоuseLazyFetch

Язык кода:txt
копировать
// Исправлен экспорт метода defineEventHandle.

export default defineEventHandler(async event => {
  // здесь прошел event.context.params.id, чтобы получить идентификатор ценить
  const id = event.context.params?.id
  // Я позвонил сюда Только что написанная информация о пользователе интерфейс, содержимое, возвращаемое в это время, 
  //  msg: `Запрос 23 личная информация`
  // Можно использовать parseCookies напрямую получает файл cookie клиента
  const cookie = parseCookies(event)
  const res = await $fetch(`/api/userInfo?id=${id}`)
  return res
})

Метод получения параметров на стороне сервера (все они инкапсулированы в nuxt) используется в методе defineEventHandler.

Среди событий даdefineEventHandlerПараметры

имя

эффект

getQuery(event)

Метод get принимает параметры запроса

readBody(event)

Метод post получает тело параметра запроса.

const id = event.context.params?.id

Получить параметр param, переданный по динамическому пути,Идентификатор соответствует имени файла

parseCookies(event)

Получить куки с сервера

boy illustration
Учебное пособие по Jetpack Compose для начинающих, базовые элементы управления и макет
boy illustration
Код js веб-страницы, фон частицы, код спецэффектов
boy illustration
【новый! Суперподробное】Полное руководство по свойствам компонентов Figma.
boy illustration
🎉Обязательно к прочтению новичкам: полное руководство по написанию мини-программ WeChat с использованием программного обеспечения Cursor.
boy illustration
[Забавный проект Docker] VoceChat — еще одно приложение для мгновенного чата (IM)! Может быть встроен в любую веб-страницу!
boy illustration
Как реализовать переход по странице в HTML (html переходит на указанную страницу)
boy illustration
Как решить проблему зависания и низкой скорости при установке зависимостей с помощью npm. Существуют ли доступные источники npm, которые могут решить эту проблему?
boy illustration
Серия From Zero to Fun: Uni-App WeChat Payment Practice WeChat авторизует вход в систему и украшает страницу заказа, создает интерфейс заказа и инициирует запрос заказа
boy illustration
Серия uni-app: uni.navigateЧтобы передать скачок значения
boy illustration
Апплет WeChat настраивает верхнюю панель навигации и адаптируется к различным моделям.
boy illustration
JS-время конвертации
boy illustration
Обеспечьте бесперебойную работу ChromeDriver 125: советы по решению проблемы chromedriver.exe не найдены
boy illustration
Поле комментария, щелчок мышью, специальные эффекты, js-код
boy illustration
Объект массива перемещения объекта JS
boy illustration
Как открыть разрешение на позиционирование апплета WeChat_Как использовать WeChat для определения местонахождения друзей
boy illustration
Я даю вам два набора из 18 простых в использовании фонов холста Power BI, так что вам больше не придется возиться с цветами!
boy illustration
Получить текущее время в js_Как динамически отображать дату и время в js
boy illustration
Вам необходимо изучить сочетания клавиш vsCode для форматирования и организации кода, чтобы вам больше не приходилось настраивать формат вручную.
boy illustration
У ChatGPT большое обновление. Всего за 45 минут пресс-конференция показывает, что OpenAI сделал еще один шаг вперед.
boy illustration
Copilot облачной разработки — упрощение разработки
boy illustration
Микросборка xChatGPT с низким кодом, создание апплета чат-бота с искусственным интеллектом за пять шагов
boy illustration
CUDA Out of Memory: идеальное решение проблемы нехватки памяти CUDA
boy illustration
Анализ кластеризации отдельных ячеек, который должен освоить каждый&MarkerгенетическийВизуализация
boy illustration
vLLM: мощный инструмент для ускорения вывода ИИ
boy illustration
CodeGeeX: мощный инструмент генерации кода искусственного интеллекта, который можно использовать бесплатно в дополнение к второму пилоту.
boy illustration
Машинное обучение Реальный бой LightGBM + настройка параметров случайного поиска: точность 96,67%
boy illustration
Бесшовная интеграция, мгновенный интеллект [1]: платформа больших моделей Dify-LLM, интеграция без кодирования и встраивание в сторонние системы, более 42 тысяч звезд, чтобы стать свидетелями эксклюзивных интеллектуальных решений.
boy illustration
LM Studio для создания локальных больших моделей
boy illustration
Как определить количество слоев и нейронов скрытых слоев нейронной сети?
boy illustration
[Отслеживание целей] Подробное объяснение ByteTrack и детали кода