После 2 лет своего первого выпуска Deno v1.0 наконец -то здесь.
Итак, что такое Дено в любом случае?
DENO – это простое, современное и безопасное время выполнения для JavaScript и TypeScript, которая использует V8 и встроен в Rust. Официальный сайт Дено
Райан Даль, оригинальный создатель Node.js (популярное время выполнения JavaScript на стороне сервера) объявил DENO на JSCONF EU 2018 на его разговоре Под названием «10 вещей, о которых я сожалею о node.js» (из названия вы можете увидеть, куда мы идем). Другим словом, если вы знакомы с Node.js, то Deno такой. За исключением того, что он улучшается во многих отношениях, он создан снизу вверх, чтобы быть лучшей реализацией Node.js.
Простое сравнение с node.js
Поскольку Deno и Node.js служат той же цели, можно сравнить два напрямую.
V8 | V8 | Двигатель |
Rust & TypeScript | C ++ и JavaScript | Написано в |
использует URL | Менеджеры пакетов: NPM | Управление пакетом |
ES -модули | Синтаксис CommonJS | Импорт пакетов |
разрешенный доступ | полный доступ | Безопасность |
встроенный | не встроен | Поддержка TypeScript |
Учебник Дено
Давайте немного поиграем с Дено.
Установка Дено
Чтобы установить Deno, просто скопируйте и вставьте эту командную строку в свой терминал.
curl -fsSL https://deno.land/x/install/install.sh | sh
Для получения дополнительной информации проверьте Официальное руководство по установке Дено.
Когда это будет сделано, у вас будет доступ к Дено
командование
Вы можете запустить дено -Хельп
Чтобы получить список вариантов и подкомандов, предоставленных Deno, и вы можете запустить deno
Чтобы получить дополнительную информацию, например, подкоманду: Deno Run -Help
Теперь вы можете запустить дено
или дено Repl
Чтобы открыть Repl (read-excute-print-петля) и начать печатать немного JavaScript
$ deno repl Deno 1.0.0 exit using ctrl+d or close() > console.log("Hello World !") Hello World !
В то время (в зависимости от того, когда вы читаете это) на 14 мая 2020 г. Реплика поддерживает только JavaScript:
Есть много вещей, которые мы можем сделать, чтобы улучшить реплику, не представляя компилятора TS. Сначала мы должны делать эти вещи (например, улучшить осмотр, завершение вкладки). Как только мы находимся наравне с репликой узла, мы можем начать изучать, как выходить за рамки этого, используя TypeScript. Комментарий Райана Дала о поддержке TypeScript в Repl
Запустите приложение DEDO
Используйте deno запустить <входная точка>
Команда запустить приложение DEDO.
Точка входа может быть .js
Файл, .ts
Файл или даже URL, который указывает на точку записи приложения, а Deno загрузит, компилируется, а затем запустите его для вас:
Например: Deno Run https://deno.land/std/examples/welcome.ts
$ deno run https://deno.land/std/examples/welcome.ts Download https://deno.land/std/examples/welcome.ts Compile https://deno.land/std/examples/welcome.ts Welcome to Deno 🦕
Если вы запустите программу снова, она будет скомпилирована непосредственно, ее не нужно снова загружать, теперь она кэшируется Deno:
$ deno run https://deno.land/std/examples/welcome.ts Compile https://deno.land/std/examples/welcome.ts Welcome to Deno 🦕
Вы можете принудить перезагрузку исходного источника с помощью -переоценивать
флаг
Deno Run -https://deno.land/std/std/examples/welcome.ts
И если вы откроете https://deno.land/std/examples/welcome.ts URL с браузером, вы получите страницу, которая содержит код и его документацию.
Веб -сайт DENO приведет другие примеры в Примеры страницы .
Давайте построим простой API REST
Мы собираемся использовать дуб каркас и TypeScript (вы также можете использовать JavaScript, если хотите)
Начнем с создания app.ts
Файл, который импортирует Приложение
от https://deno.land/x/oak/mod.ts и маршрутизатор
от ‘./router.ts’
import { Application } from 'https://deno.land/x/oak/mod.ts' import router from './routes.ts'
Тогда нам нужно установить переменные среды Хост
и Порт
const HOST = '127.0.0.1' const PORT = 7700
Теперь давайте создадим маршруты
Импорт файла Маршрутизатор
от https://deno.land/x/oak/mod.ts и создать маршруты.
import { Router }from 'https://deno.land/x/oak/mod.ts' import { getBooks, getBook, addBook, updateBook, deleteBook } from './controller.ts' const router = new Router() router.get('/books', getBooks) .get('/books/:isbn', getBook) .post('/books', addBook) .put('/books/:isbn', updateBook) .delete('/books/:isbn', deleteBook) export default router
ПРИМЕЧАНИЕ: функции GetBooks
, GetBook
, addbook
, книга обновлений
и DeleteBook
импортируются из локального файла, просто мы еще не создали их.
После создания маршрутизатора давайте закончим наш app.ts
добавив в него этот код,
const app = new Application() app.use(router.routes()) app.use(router.allowedMethods()) console.log(`Listening on port ${PORT} ...`) await app.listen(`${HOST}:${PORT}`)
Теперь давайте создадим файл controller.ts и определим интерфейс для книги IBook
, затем мы объявляем первоначальный массив книжных объектов:
interface IBook { isbn: string; author: string; title: string; } let books: Array= [{ isbn: "1", author: "Robin Wieruch", title: "The Road to React", },{ isbn: "2", author: "Kyle Simpson", title: "You Don't Know JS: Scope & Closures", },{ isbn: "3", author: "Andreas A. Antonopoulos", title: "Mastering Bitcoin", }]
Теперь давайте реализуем функции один за другим
GetBooks: возвращает все книги в списке.
const getBooks = ({ response }: { response: any }) => { response.body = books }
GetBook: возвращает одну книгу по своему ISBN или сообщению об ошибке, если не найдено.
const getBook = ({ params, response }: { params: { isbn: string }; response: any }) => { const book: IBook | undefined = searchBookByIsbn(params.isbn) if (book) { response.status = 200 response.body = book } else { response.status = 404 response.body = { message: `Book not found.` } } }
AddBook: добавьте книгу в список книг.
const addBook = async ({ request, response }: { request: any; response: any }) => { const body = await request.body() const book: IBook = body.value books.push(book) response.body = { message: 'OK' } response.status = 200 }
Обновление: обновляет книгу, если существует, верните сообщение об ошибке, если нет.
const updateBook = async ({ params, request, response }: { params: { isbn: string }; request: any; response: any }) => { let book: IBook | undefined = searchBookByIsbn(params.isbn) if (book) { const body = await request.body() const updateInfos: { author?: string; title?: string } = body.value book = { ...book, ...updateInfos} books = [...books.filter(book => book.isbn !== params.isbn), book] response.status = 200 response.body = { message: 'OK' } } else { response.status = 404 response.body = { message: `Book not found` } } }
Deletebook: удаляет книгу из списка книг.
const deleteBook = ({ params, response }: { params: { isbn: string }; response: any }) => { books = books.filter(book => book.isbn !== params.isbn) response.body = { message: 'OK' } response.status = 200 }
После добавления функций в Controller.ts
Нам нужно экспортировать их, чтобы мы могли использовать их в router.ts
файл
/* return the book if found and undefined if not */ const searchBookByIsbn = (isbn: string): ( IBook | undefined ) => books.filter(book => book.isbn === isbn )[0] export { getBooks, getBook, addBook, updateBook, deleteBook }
Примечание: SearchBookByisbn ()
Это просто вспомогательная функция.
Здесь исходный код на GitHub
Ты хочешь больше Дено?
Вот некоторые ресурсы: Официальный сайт Дено , Документация API И вы можете найти гораздо больше ресурсов, библиотек и рамок в Удивительный список Дено Анкет
Оригинал: “https://dev.to/am77/deno-v1-0-303j”