[英]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文件夾並在lib
或dist
文件夾中找到一個文件,您可以使用該文件,就像我在上面使用some_library.js
,但並非總是如此。 您嘗試從npm獲取的任何功能可能都有面向瀏覽器的來源。
希望這可以幫助!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.