次のノードコードを実行しているときに、コンソールでSyntaxError: expected expression, got '<'
エラーが発生しました
var express = require('express');
var app = express();
app.all('*', function (req, res) {
res.sendFile(__dirname+'/index.html') /* <= Where my ng-view is located */
})
var server = app.listen(3000, function () {
var Host = server.address().address
var port = server.address().port
})
エラー:
Angular Jsを使用しており、以下のようなフォルダ構造です
ここに何が欠けていますか?
このコード:
app.all('*', function (req, res) {
res.sendFile(__dirname+'/index.html') /* <= Where my ng-view is located */
})
ブラウザが何を要求しても、サーバーはindex.html
を返す必要があることをExpressに伝えます。そのため、ブラウザーがjquery-x.y.z.main.js
やangular.min.js
などのJavaScriptファイルを要求すると、サーバーはindex.html
で始まる<!DOCTYPE html>
のコンテンツを返し、JavaScriptエラーが発生します。
コールバック内のコードはリクエストを見て、どのファイルを送り返すかを決定する必要があります。また、app.all
で別のパスパターンを使用する必要があります。詳細については、 ルーティングガイド をご覧ください。
これを試してください、通常私のために働く:
app.set('appPath', 'public');
app.use(express.static(__dirname +'/public'));
app.route('/*')
.get(function(req, res) {
res.sendfile(app.get('appPath') + '/index.html');
});
ディレクトリpublicにはindex.htmlが含まれ、bower_componentsフォルダー内のすべてのangularファイルを参照します。
私が信じているexpress.static部分は、静的ファイル(index.htmlによって参照される.jsおよびcssファイル)を正しく提供します。コードから判断すると、おそらく次の行を使用する必要があります。
app.use(express.static(__dirname));
すべてのJSファイル、index.htmlおよびJSサーバーファイルは同じディレクトリにあるようです。
@ T.J。 Crowderは、app.routeを使用してindex.html以外の異なるファイルを送信すると言っていました。これは、index.htmlを使用するだけでプログラムが.htmlファイルを検索し、JSエラーを引き起こすためです。
これがうまくいくことを願っています!
主なアイデアは、Javascriptの代わりにHTMLが何らかの形で返されることです。
その理由は次のとおりです。
誤ったアセットのプリコンパイルが原因である可能性があります。私の場合、間違ったエンコードのためにこのエラーをキャッチしました。
Application.jsを開いたとき、application error Encoding::UndefinedConversionError at /assets/application.js
を見ました
JavasriptではなくHTMLとしてフォーマットされたエラーの完全なバックトレースがありました。
アセットが正常にプリコンパイルされていることを確認してください。
同じエラーが発生しました。そして私の場合
REASON:サーバー上のそのリソースに対する制限があり、サーバーはjavascriptページではなくログインページを送信していました。
SOLUTION:リソースへのアクセスをユーザーに許可するか、制限を削除します。
インラインタグをhtmlに配置するときに、このエラーメッセージを受け取ることもできますが、次のように、終了スクリプトタグにスラッシュを追加するのを忘れた(私にとっては一般的な)タイプミスを行います。
<script>
alert("I ran!");
<script> <!-- OOPS opened script tag again instead of closing it -->
JSインタープリターは、タグを「実行」しようとします。これは、小なり記号で始まる式のように見えるため、エラー:SyntaxError: expected expression, got '<'
認証されたASPNETアプリケーションでこの問題を解決しました。webResource.axdをweb.configの場所として追加して、匿名ユーザーに許可されるようにしました
<location path="WebResource.axd">
<system.web>
<authorization>
<allow users="?"/>
</authorization>
</system.web>
</location>
Djangoでこのタイプの質問を受けましたが、私の問題はstatic
を<script>
タグに追加することを忘れています。
私のテンプレートのように:
<script type="text/javascript" src="css/layer.js"></script>
次のようにstatic
を追加する必要があります。
<script type="text/javascript" src="{% static 'css/layer.js' %}" ></script>
Wordpressサイトを別のサーバーに移行したときに、同じエラーが発生しました。 jsスクリプトのヘッダー内のURLは、まだ古いサーバーとドメイン名を指していました。
ドメイン名を更新すると、エラーはなくなりました。
これは誰かを助けるかもしれません。私が得ていたエラーは
SyntaxError:期待される式、「<」を取得
chromeのソースの表示をクリックしたところ、このエラーが見つかりました
通知:未定義の変数:文字列 D:\ Projects\demo\ge.php オンラインで 66
問題は、このコードスニペットでした。
$string= ''; <---- this should be declared outside the loop
while($row = mysql_fetch_assoc($result))
{
$string .= '{ id:'.$row['menu_id'].', pId:'.$row['parent_id'].', name:"'.$row['menu_name'].'"},';
}
問題を修正しました。
単に追加するだけです:
app.use(express.static(__dirname +'/app'));
ここで、'/app'
は、index.htmlまたはWebappが存在するディレクトリです。
Angular jsを使用して同様の問題が発生しました。 .htaccessのindex.htmlをすべて書き換えました。解決策は、正しいパススラッシュをに追加することでした。それぞれの状況は独特ですが、これが誰かの助けになることを願っています。
この問題は、間違ったパスのファイルをインクルードし、サーバーがファイルのロード中に404エラーを発生させた場合に発生します。
これはあなたのために働くはずです。 SPAを使用している場合。
app.use('/', express.static(path.join(__dirname, 'your folder')));
// Send all other requests to the SPA
app.get('*', (req, res) => {
res.sendFile(path.join(__dirname, 'your folder/index.html'));
});