web-dev-qa-db-fra.com

SyntaxError: expression attendue, notée '<'

J'ai eu une erreur SyntaxError: expected expression, got '<' dans la console lorsque j'exécute le code de noeud suivant

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
})

Erreur : enter image description here

J'utilise Angular Js et sa structure de dossier ressemble à celle ci-dessous 

enter image description here

Qu'est-ce qui me manque ici? 

46
underscore

Ce code:

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

indique à Express que, quelles que soient les demandes du navigateur, votre serveur doit renvoyer index.html. Ainsi, lorsque le navigateur demande des fichiers JavaScript tels que jquery-x.y.z.main.js ou angular.min.js, votre serveur renvoie le contenu de index.html, qui commence par <!DOCTYPE html>, ce qui provoque l'erreur JavaScript.

Votre code dans le rappel devrait examiner la demande pour déterminer le fichier à renvoyer et/ou vous devez utiliser un modèle de chemin différent avec app.all. Voir le guide de routage pour plus de détails.

44
T.J. Crowder

Essayez ceci, fonctionne habituellement pour moi:

app.set('appPath', 'public');
app.use(express.static(__dirname +'/public'));

app.route('/*')
  .get(function(req, res) {
    res.sendfile(app.get('appPath') + '/index.html');
  });

Où le répertoire public contient mon index.html et référence tous mes fichiers angulaires dans le dossier bower_components.

La partie express.static sert, je crois, les fichiers statiques correctement (fichiers .js et css comme référencé par votre index.html). À en juger par votre code, vous devrez probablement utiliser cette ligne à la place:

app.use(express.static(__dirname));

comme il semble que tous vos fichiers JS, index.html et votre fichier de serveur JS se trouvent dans le même répertoire.

Je pense que @ T.J. Crowder essayait de dire qu'il utilisait app.route pour envoyer d'autres fichiers que index.html, car en utilisant simplement index.html, votre programme se contente de rechercher des fichiers .html et de provoquer l'erreur JS.

J'espère que ça marche!

10
devonj

L'idée principale est que HTML a été renvoyé à la place de Javascript.

La raison peut être:

  • mauvais chemins
  • actifs lui-même

Cela peut être dû à une précompilation d’actifs erronée. Dans mon cas, j'ai attrapé cette erreur à cause d'un encodage incorrect.

Quand j'ai ouvert mon application.js j'ai vu application error Encoding::UndefinedConversionError at /assets/application.js

Il y avait une trace complète d'erreur formatée en HTML au lieu de Javasript.

Assurez-vous que les actifs ont été précompilés avec succès.

8
Nick Roz

J'ai eu la même erreur. Et dans mon cas

RAISON: Il y avait une restriction sur le serveur et le serveur envoyait une page de connexion au lieu de pages javascript. 

SOLUTION: donne accès à l'utilisateur pour les resourses ou supprime la restriction. 

5
Erlan

Vous pouvez également obtenir ce message d'erreur lorsque vous placez une balise inline dans votre code html, mais indiquez la faute de frappe (commune pour moi) selon laquelle vous oubliez d'ajouter la barre oblique à la balise de fermeture du script comme suit:

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

L'interpréteur JS tente d'exécuter la balise, qui ressemble à une expression commençant par un signe inférieur à, d'où l'erreur: SyntaxError: expected expression, got '<'

3
gigawatt

J'ai résolu ce problème avec mon application ASPNET authentifiée en ajoutant WebResource.axd en tant qu'emplacement sur le fichier web.config afin qu'il soit autorisé pour les utilisateurs anonymes. 

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

J'ai eu cette question type sur Django, et mon problème est d'oublier d'ajouter static à la balise <script>.

Tels que dans mon modèle:

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

Je devrais y ajouter la static comme ceci:

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

J'ai eu cette même erreur lorsque j'ai migré un site Wordpress vers un autre serveur ..__ L'URL dans l'en-tête de mes scripts js pointait toujours vers l'ancien serveur et le nom de domaine 

Une fois que j'ai mis à jour le nom de domaine, l'erreur a disparu.

0
Birdie Golden

Peut-être que cela aide quelqu'un. L'erreur que je devenais était

SyntaxError: expression attendue, notée '<'

Ce que j'ai fait a cliqué sur voir la source en chrome et là j'ai trouvé cette erreur

Remarquer: Variable non définie: chaîne dans D:\Projects\demo\ge.php en ligne 66

Le problème était cet extrait de code,

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

qui a résolu le problème.

0
Hammad Khan

Ajoutez simplement:

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

'/app' est le répertoire où réside votre index.html ou votre Webapp.

0

J'ai eu un problème similaire en utilisant angular js. J'avais tout réécrit en index.html dans mon fichier .htaccess . La solution consistait à ajouter le chemin d'accès correct.

0
phil

Ce problème se produit lorsque vous incluez un fichier avec un chemin incorrect et que le serveur génère une erreur 404 lors du chargement du fichier. 

0
Muhammad Khalid

Cela devrait fonctionner pour vous. Si vous utilisez 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