Javascript на стороне сервера: почему?

Попробуйте этот код. Это создаст приложение для excel, csv, pdf, а также встроенное вложение, т. Е. В теле письма для формата изображения png. Для формата png множественное изображение будет внедрено встроенным одно за другим методом GetEmbeddedImage . Вы можете настроить его на основе вашего требования.

SmtpClient smtpServer = new SmtpClient(smtpServerName);
smtpServer.Port = 25;
smtpServer.Credentials = new System.Net.NetworkCredential(userName, password);
//smtpServer.EnableSsl = true;
MailMessage smtpEmail = new MailMessage();
string messageBodyImage = @"<img width=1200 id=""MyContent"" src=""cid:{0}"">";
 toAddressList = toAddress.Split(';');
foreach (string toEmail in toAddressList)
    smtpEmail.To.Add(toEmail);

smtpEmail.From = new MailAddress(fromAddress);
smtpEmail.Body = messageBody;
smtpEmail.Subject = subject;
foreach (string format in fileExtension)
 {    
    switch (format)
     {       
    case "PNG": 
    smtpEmail.IsBodyHtml = true;
    smtpEmail.AlternateViews.Add(GetEmbeddedImage(reportByteStream, messageBodyImage, format)); 
    break;
    case "CSV":      
    smtpEmail.Attachments.Add(new System.Net.Mail.Attachment(new MemoryStream(myStream[format][0]), "MyReport." + format, "text/csv"));  
    break;
    case "XLS": 
    smtpEmail.Attachments.Add(new System.Net.Mail.Attachment(new MemoryStream(myStream[format][0]), "MyReport." + format, "application/vnd.ms-excel"));
    break;
    default: // For PDF
    smtpEmail.Attachments.Add(new System.Net.Mail.Attachment(new MemoryStream(myStream[format][0]), "MyReport." + format, MediaTypeNames.Application.Pdf));
    break;
    }
}

Способ встраивания нескольких встроенных изображений.

    private AlternateView GetEmbeddedImage(Dictionary<string, Byte[][]> streamAttachment, string msgTemplate, string fileFormat)
    {
        LinkedResource imageFile = null;
        AlternateView alternateView = null;
        string msgBody = string.Empty;
        try
        {
        List<LinkedResource> imageFiles = new List<LinkedResource>();
        for (int page = 0; page < streamAttachment[fileFormat].Length; page++)
        {   
                imageFile = new LinkedResource(new MemoryStream(streamAttachment[fileFormat][page]));
                imageFile.ContentId = Guid.NewGuid().ToString();
                msgBody = msgBody + "<BR/>" + string.Format(msgTemplate, imageFile.ContentId);
                imageFiles.Add(imageFile); 
        }

        alternateView = AlternateView.CreateAlternateViewFromString(msgBody, null, MediaTypeNames.Text.Html);
        imageFiles.ForEach(img => alternateView.LinkedResources.Add(img));
        }
        catch (Exception Ex)
        {

        }
        return alternateView;
    } 
30
задан Ronn 27 March 2009 в 20:49
поделиться

5 ответов

Это идет как это:

Серверы являются дорогими, но пользователи дадут Вам время обработки в своих браузерах бесплатно. Поэтому серверный код является относительно дорогим по сравнению с клиентским кодом любого сайта, достаточно большого для выполнения больше чем одного сервера. Однако существуют некоторые вещи, которые Вы не можете оставить клиенту, как подтверждение правильности данных и извлечение. Требуется сделать их на клиенте, потому что это означает более быстрое время отклика для пользователей и меньше серверной инфраструктуры для себя, но проблемы безопасности и доступности средний серверный код требуются.

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

Так как мы - все (главным образом) программисты здесь, мы должны сразу определить новую проблему. Нет только дополнительной работы, вовлеченной в разработку двух наборов той же логики, но также и работы, вовлеченной в поддержание его, неизбежные ошибки, следующие из платформ, не совпадают хорошо, и ошибки, представленные, поскольку реализации расходятся со временем.

Введите серверную сторону JavaScript. Идея - Вы, может написать код однажды, таким образом, тот же код работает и на сервере и на клиенте. Это, казалось бы, решило бы большую часть проблемы: Вы получаете полный набор и сервера и клиентской логики, сделанной внезапно, нет никакого дрейфа и никакого двойного обслуживания. Также хорошо, когда Ваши разработчики только должны знать один язык и для сервера и для работы с клиентами.

К сожалению, в реальном мире это не удается так хорошо. Проблема является четырехкратной:

  1. Представление сервера страницы все еще очень отличается от клиентского представления страницы. Сервер должен смочь сделать вещи как разговор непосредственно базе данных, которая просто не должна быть сделана от браузера. Браузер должен сделать, вещам нравится, управляют DOM, который не совпадает с сервером.
  2. Вы не управляете механизмом JavaScript клиента, подразумевая, что все еще будут важные языковые различия между Вашим серверным кодом и Вашим клиентским кодом.
  3. База данных обычно является большим узким местом, чем веб-сервер, таким образом сбережения минимальны.
  4. В то время как примерно все знают немного JavaScript, не, многие разработчики действительно знают и понимают JavaScript хорошо.

Это не абсолютно неприступные технические проблемы: Вы ограничиваете поддерживаемый язык сервера к подмножеству JavaScript, это хорошо поддерживается через большинство браузеров, обеспечьте IDE, который знает это подмножество и расширения серверной стороны, сделайте некоторые правила о структуре страницы, чтобы минимизировать проблемы DOM и предоставить некоторому шаблону JavaScript для включения в клиент для создания платформы немного более хорошей использовать. Результат - что-то как Aptana Studio/Jaxer или позже Node.js, который может быть довольно хорошим.

Но не прекрасный. По-моему, существует только слишком много ловушек и мало проблем совместимости, чтобы заставить это действительно сиять. В конечном счете дополнительные серверы являются все еще дешевыми по сравнению со временем разработчика, и большинство программистов может быть намного более продуктивным использованием чего-то другого, чем JavaScript.

То, что я действительно хотел бы видеть, является частичной серверной стороной JavaScript. Когда страницу требуют, или форма утверждала, что серверная платформа действительно запрашивает проверку в JavaScript, возможно, как плагин к веб-серверу это абсолютно независимо от остальной части его, но ответ создается с помощью платформы по Вашему выбору.

47
ответ дан Joel Coehoorn 27 November 2019 в 23:44
поделиться

Я думаю действительно прохладное использование серверной стороны JavaScript, который не используется, почти достаточно часто для подтверждения правильности данных. С ним можно записать один файл JavaScript, чтобы проверить форму, проверить его на стороне клиента, затем проверить его снова на стороне сервера, потому что мы ничему не должны доверять на стороне клиента. Это позволяет Вам сохранить свои правила проверки DRY. Довольно удобный.

Также см.:

6
ответ дан Community 27 November 2019 в 23:44
поделиться

JavaScript является просто языком. Поскольку это - просто язык, можно использовать его где угодно, Вы хотите... в Вашем браузере, на сервере, встроенном в другие приложения, автономные приложения, и т.д.

Однако я не знаю, что существует большая новая разработка, происходящая с "Серверной стороной JavaScript"

3
ответ дан Brian Genisio 27 November 2019 в 23:44
поделиться

Мы используем JavaScript на клиенте, потому что это там, не потому что из списка языков это был наш выбор. Я не выбрал бы его ни для какой тяжелой работы на сервере.

Можно выполнить любой язык, который Вы любите на сервере, на самом деле, столько, сколько хотите.

JavaScript надежен и прост в использовании, но это просто слишком трудоемки для общих задач на сервере.

1
ответ дан kennebec 27 November 2019 в 23:44
поделиться

JavaScript является совершенно хорошим языком с сам / опытная основа стиля схемы и синтаксис стиля C. Существуют некоторые проблемы, видят JavaScript Хорошие Части, но в целом это - первый язык уровня. Проблема состоит в том, что большинство программистов JavaScript является ужасными программистами, потому что это очень доступно для начала работы.

Одна команда в Google пристроила Носорога на направляющих, который является платформой MVC как Ruby on Rails, который записан в JavaScript и работает на Носороге интерпретатор JavaScript для Java VM. В этом случае они имели требование для использования Java VM, но хотели получить язык, который был быстр (JavaScript быстр), поддерживаемый утиный ввод, и было гибко.

Другой пример - что-то как CouchDB, документ ориентировал базу данных, которая использует json, поскольку это - транспортный формат и JavaScript, как это - язык запроса и индекса. Они хотели, чтобы база данных была максимально веб-собственным компонентом.

JavaScript способен к строке и dom (xml) управление, быть поигравшимся в песочнице, сети, расширение себя, и т.д... Подобными функциями является вещь, которую Вы часто делаете при разработке веб-приложений.

Однако я на самом деле не разрабатываю сторону сервера JavaScript. Это не плохая идея, но определенно менее распространенный.

3
ответ дан rabble 27 November 2019 в 23:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: