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 :
J'utilise Angular Js et sa structure de dossier ressemble à celle ci-dessous
Qu'est-ce qui me manque ici?
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.
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!
L'idée principale est que HTML a été renvoyé à la place de Javascript.
La raison peut être:
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.
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.
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 '<'
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>
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>
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.
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.
Ajoutez simplement:
app.use(express.static(__dirname +'/app'));
où '/app'
est le répertoire où réside votre index.html ou votre Webapp.
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.
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.
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'));
});