繁体   English   中英

如何使它们工作-NPM和Sails(html-pdf)

[英]How get them to work - npm & sails (html-pdf)

编辑:好吧,我会保持简单,如果需要的话,我会在其他帖子中问我所有其他问题。 最初的帖子太过庞大了,希望有人能向我提供有关使用帆发挥其全部潜能的所有知识的指南。 抱歉。

首先,我对angular,npm和sails.js还是很陌生,但是我有一个很好的Javascript基础。

我所知道的全部来自“ Sails.js in Action”书。

我正在尝试使用npm软件包(用html-pdf命名),但无法正常工作。

我需要从网页创建pdf发票。

所以我通过npm install html-pdf --save安装了html-pdf包到我的sails项目中。 然后只是为了进行测试并使其正常工作,我使用了当前为空白的主页,并添加了一些文本和“另存为pdf”按钮。

这是ejs主页代码(在视图中):

<div ng-controller="homePageCtrl" class="homepage" ng-cloak>
    <div class="container">
      <div class="row">
        <center>
            <br /><h1>Accueil</h1><br /><br />
            <h3>Bienvenue !</h3><br /><br />
            <h3>Test création PDF</h3><br />
            <h4>Si vous avez des questions ou des problèmes,</h4>
            <h4>veuillez contacter l'assistance technique.</h4>
            <br /><br />
            <button class="btn btn-success btn-lg" type="button" ng-click="printPdf()">
              <span>Imprimer</span>
              </button>
        </center>
      </div>
    </div>
  </div>

现在这是我尝试从我的assets / js / controllers / homePageCtrl.js中为printPdf函数尝试的第一件事(相当一部分示例代码):

angular.module('teknik').controller('homePageCtrl', ['$scope', '$http', function($scope, $http) {

    $scope.printPdf = function(){
      var fs = require('fs');
      var pdf = require('html-pdf');
      var html = fs.readFileSync('./views/homepage.ejs', 'utf8');
      var options = { format: 'Letter' };

      pdf.create(html, options).toFile('/pdfs/test.pdf', function(err, res) {
        if (err) return console.log(err);
        console.log(res); 
      });
    };

}]);

它给我一个关于var fs = require('fs');的错误var fs = require('fs'); 行(找不到变量:require),所以我后来尝试了一些更改。 在html-pdf用法未呈现图像后,我发现此示例Sails EJS-view并尝试更改代码以适合我的需要,但它在代码开头也给了我一个错误(相同的错误,但我没有适应)。

我不是这个主题的专家,但是我想我可以确切地看到您的知识差距给您带来了很多麻烦。

npm模块以及随附的大多数文档都旨在在服务器上运行代码中使用这些模块。 从上面的代码我可以看到,您正在客户端浏览器中运行代码。 在那里没有设置Npm模块以及它们使用的整个require框架。

在Sails中,您在控制器,服务和模型中编写的代码( /api/文件夹中的几乎所有内容都在服务器端运行,因此要求和使用npm模块将在此处运行。

您放在/assets/文件夹中的代码是不同的。 此处的文件具有javascript,该javascript被发送(不运行)到客户端计算机上的浏览器并在该计算机上运行。 没有设置Npm模块在那儿工作。

Sails视图有点令人困惑:在服务器端完成模板(所有<% ... %>块均已评估),但这些块外的所有javascript都不会运行,直到客户端浏览器稍后运行它为止。 例如,事件处理程序代码是所有客户端代码。

如果确实需要运行客户端的库等,则可以采用“老式”的方法:添加一个javascript资产,并从需要运行它的文件(与jquery一样)中链接到它。因此,如果您在项目中拥有文件/assets/js/some_library.js ,然后在html文件或视图中添加:

<script src="/js/some_library.js"></script>
<script>
    // your custom code here. You can often use
    // variables from the library here as you would
    // after "require"ing them in server-side code
</script>

Npm可能是查找以这种方式使用的脚本的尴尬场所。 有时,您可以进入npm文件夹并在libdist文件夹中找到一个文件,您可以使用该文件,就像我在上面使用some_library.js ,但并非总是如此。 您尝试从npm获取的任何功能可能都有面向浏览器的来源。

希望这可以帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM