2017-07-28 74 views
0

我已經配置了節點js默認項目,並且使用了快速和使用HTML頁面而不是JADE。我想在HTML頁面中使用Angular JS。 Angular JS簡單的例子在這個項目中工作正常:Angular js表達式不能在Node js項目中工作

<!DOCTYPE html> 
<html lang="en-US"> 
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.4/angular.min.js"></script> 
<body> 

<div ng-app=""> 
    <p>Name : <input type="text" ng-model="name"></p> 
    <p ng-bind="name"></p> 
</div> 

</body> 
</html> 

它的工作很好。但是,如果我使用{{name}}而不是ng-bind =「name」,則不能在此項目中使用。 例如:

<!DOCTYPE html> 
<html lang="en-US"> 
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.4/angular.min.js"></script> 
<body> 

<div ng-app=""> 
    <p>Name : <input type="text" ng-model="name"></p> 
    <h1>Hello {{name}}</h1> 
</div> 

</body> 
</html> 

這不適用於節點項目。任何人都可以幫助我找出問題。

App.js文件的代碼如下:

var express = require('express'); 
var path = require('path'); 
var favicon = require('serve-favicon'); 
var logger = require('morgan'); 
var cookieParser = require('cookie-parser'); 
var bodyParser = require('body-parser'); 

// Sql server new code 
var Connection = require('tedious').Connection; 
var Request = require('tedious').Request; 

var webconfig = { 
    user: 'sa', 
    password: '#####', 
    server: '######', 
    database: 'Test_Training', 

    options: { 
     encrypt: false // Use this if you're on Windows Azure 
    } 
} 
var sql = require('mssql'); 
// Sql server new code 

var index = require('./routes/index'); 
var users = require('./routes/users'); 

var app = express(); 


// To use simple html page 
var cons = require('consolidate'); 

// view engine setup 
app.engine('html', cons.swig) 
app.set('views', path.join(__dirname, 'views')); 
app.set('view engine', 'html'); 
// To use simple html page 

app.use(logger('dev')); 
app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded({ extended: false })); 
app.use(cookieParser()); 
app.use(express.static(path.join(__dirname, 'public'))); 
app.use(express.static(__dirname + '/public')); 

app.use('/', index); 
app.use('/users', users); 

// catch 404 and forward to error handler 
app.use(function(req, res, next) { 
    var err = new Error('Not Found'); 
    err.status = 404; 
    next(err); 
}); 

// error handler 
app.use(function(err, req, res, next) { 
    // set locals, only providing error in development 
    res.locals.message = err.message; 
    res.locals.error = req.app.get('env') === 'development' ? err : {}; 

    // render the error page 
    res.status(err.status || 500); 
    res.render('error'); 
}); 
module.exports = app; 

幫助將不勝感激。

+1

哪裏是控制器 –

+0

它正常工作對我來說。 –

+2

@sachilaranawaka此代碼無控制器工作 – Akashii

回答

1

開箱即用的HTML引擎不受支持。

(參考:https://github.com/expressjs/express/wiki#template-engines)由@Thanh董先生給

解決方案將工作,但如果你真的要設置HTML作爲視圖引擎應按照此解決方案

app.set('views', path.join(__dirname, 'views')); 
// Set EJS View Engine 
app.set('view engine','html'); 
// Set HTML engine 
app.engine('html', require('ejs').renderFile); 

後來你需要把你的index.html內/ views目錄

(原來的答案:https://stackoverflow.com/a/44945104/3627827

編輯:更新的請按照@DanielZiga的建議操作

+0

雖然這個鏈接可能回答這個問題,但最好在這裏包含答案的基本部分,並提供參考鏈接。如果鏈接頁面更改,則僅鏈接答案可能會失效。 - [來自評論](/評論/低質量帖/ 16858746) – diceler

+0

Thakns審查,更新了答案@DanielZiga – kkalamarski

+0

就像他說:我的摩托不工作,你正在建議購買一輛自行車......而相反,他期望解決問題! – Hitmands

1

首先將其刪除:

app.engine('html', cons.swig) 
app.set('views', path.join(__dirname, 'views')); 
app.set('view engine', 'html'); 

我不知道你的strug文件夾,但我想在公共文件夾,你index.html文件。嘗試在您的節點中添加以下代碼:

app.get('/*',function(req,res){ 
      res.sendFile(index.html,{root:path.join(__dirname,public/index.html)}); 
     }) 
+0

Tung我已將App.js代碼更新到我的問題部分。你可以修改這個地方,你建議我添加此代碼。我已經嘗試過,但顯示錯誤。 「意外syntex」 –

+0

@ThanhTùng你仍然錯過了第一個參數。 – kkalamarski

+0

@kkalamarski我的錯誤。謝謝 – Akashii

0

您正在使用Swig作爲服務器端渲染的Template Engine

正如您在其文檔中看到的那樣,Swig使用{{}}作爲插值分隔符......它們與AngularJS使用的相同。

可能發生的是Swig不會讓你的原始HTML到達角...

嘗試改變interpolation delimiters

// https://docs.angularjs.org/api/ng/provider/$interpolateProvider 

angular 
    .module('ModuleName') 
    .config(['$interpolateProvider', function($interpolateProvider) { 

    // set start symbol here 
    $interpolateProvider.startSymbol('^_^'); 

    // set end symbol here 
    $interpolateProvider.endSymbol('"_"'); 
    }]) 
; 
+0

在哪個文件中這些文件將被製作?? –

+0

任何地方...儘量不要使用SO作爲調試幫助社交媒體。 – Hitmands

+0

@你在'interpolateProvider'裏面缺少$的命令,你也沒有指定把代碼放在哪裏。 (請注意,沒有附加js文件) – kkalamarski