web-dev-qa-db-ja.com

SyntaxError:期待される式、「<」を取得

次のノードコードを実行しているときに、コンソールで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
})

エラー:enter image description here

Angular Jsを使用しており、以下のようなフォルダ構造です

enter image description here

ここに何が欠けていますか?

50
underscore

このコード:

app.all('*', function (req, res) {
  res.sendFile(__dirname+'/index.html') /* <= Where my ng-view is located */
})

ブラウザが何を要求しても、サーバーはindex.htmlを返す必要があることをExpressに伝えます。そのため、ブラウザーがjquery-x.y.z.main.jsangular.min.jsなどのJavaScriptファイルを要求すると、サーバーはindex.htmlで始まる<!DOCTYPE html>のコンテンツを返し、JavaScriptエラーが発生します。

コールバック内のコードはリクエストを見て、どのファイルを送り返すかを決定する必要があります。また、app.allで別のパスパターンを使用する必要があります。詳細については、 ルーティングガイド をご覧ください。

49
T.J. Crowder

これを試してください、通常私のために働く:

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エラーを引き起こすためです。

これがうまくいくことを願っています!

10
devonj

主なアイデアは、Javascriptの代わりにHTMLが何らかの形で返されることです。

その理由は次のとおりです。

  • 間違った道
  • 資産自体

誤ったアセットのプリコンパイルが原因である可能性があります。私の場合、間違ったエンコードのためにこのエラーをキャッチしました。

Application.jsを開いたとき、application error Encoding::UndefinedConversionError at /assets/application.jsを見ました

JavasriptではなくHTMLとしてフォーマットされたエラーの完全なバックトレースがありました。

アセットが正常にプリコンパイルされていることを確認してください。

8
Nick Roz

同じエラーが発生しました。そして私の場合

REASONサーバー上のそのリソースに対する制限があり、サーバーはjavascriptページではなくログインページを送信していました。

SOLUTION:リソースへのアクセスをユーザーに許可するか、制限を削除します。

5
Erlan

インラインタグをhtmlに配置するときに、このエラーメッセージを受け取ることもできますが、次のように、終了スクリプトタグにスラッシュを追加するのを忘れた(私にとっては一般的な)タイプミスを行います。

<script>
  alert("I ran!");
<script> <!-- OOPS opened script tag again instead of closing it -->

JSインタープリターは、タグを「実行」しようとします。これは、小なり記号で始まる式のように見えるため、エラー:SyntaxError: expected expression, got '<'

3
gigawatt

認証されたASPNETアプリケーションでこの問題を解決しました。webResource.axdをweb.configの場所として追加して、匿名ユーザーに許可されるようにしました

<location path="WebResource.axd">
  <system.web>
    <authorization>
      <allow users="?"/>
    </authorization>
  </system.web>
</location>
0
erionpc

Djangoでこのタイプの質問を受けましたが、私の問題はstatic<script>タグに追加することを忘れています。

私のテンプレートのように:

<script  type="text/javascript"  src="css/layer.js"></script>

次のようにstaticを追加する必要があります。

<script type="text/javascript" src="{% static 'css/layer.js' %}" ></script>
0
aircraft

Wordpressサイトを別のサーバーに移行したときに、同じエラーが発生しました。 jsスクリプトのヘッダー内のURLは、まだ古いサーバーとドメイン名を指していました。

ドメイン名を更新すると、エラーはなくなりました。

0
Birdie Golden

これは誰かを助けるかもしれません。私が得ていたエラーは

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'].'"},';
    }

問題を修正しました。

0
Hammad Khan

単に追加するだけです:

app.use(express.static(__dirname +'/app'));

ここで、'/app'は、index.htmlまたはWebappが存在するディレクトリです。

0

Angular jsを使用して同様の問題が発生しました。 .htaccessのindex.htmlをすべて書き換えました。解決策は、正しいパススラッシュをに追加することでした。それぞれの状況は独特ですが、これが誰かの助けになることを願っています。

0
phil

この問題は、間違ったパスのファイルをインクルードし、サーバーがファイルのロード中に404エラーを発生させた場合に発生します。

0
Muhammad Khalid

これはあなたのために働くはずです。 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'));
});
0
tigercosmos