GVKun编程网logo

angularjs – 如何以角度读取nodejs流?(angular读取本地json)

16

在本文中,我们将为您详细介绍angularjs–如何以角度读取nodejs流?的相关知识,并且为您解答关于angular读取本地json的疑问,此外,我们还会提供一些关于angularjsexpres

在本文中,我们将为您详细介绍angularjs – 如何以角度读取nodejs流?的相关知识,并且为您解答关于angular读取本地json的疑问,此外,我们还会提供一些关于angularjs express nodejs的关系、angularjs – Angular CLI:无法读取null的属性’config’、angularjs – Dockerize你的Angular NodeJS应用程序、angularjs – Node.js / Angular.js管理员授权的路由的有用信息。

本文目录一览:

angularjs – 如何以角度读取nodejs流?(angular读取本地json)

angularjs – 如何以角度读取nodejs流?(angular读取本地json)

在nodejs中,我向客户端发送一个流,如下所示:

DockerService.get().pull('my/image',function(err,stream) {
  if (err) {
    return res.badRequest(err);
  } else {
    return stream.pipe(res);
  }
});

这是使用$http.get从angularjs客户端触发的:

pull: function() {
  var url = ENV.apiEndpoint + '/docker/pull';
  var promise = $http.get(url).success(function(response) {
    return response;
  }).error(function(data,status) {

  });
  return promise;
}

但是我无法读取流.从角度我得到一个错误消息:

SyntaxError: Unexpected token {
    at Object.parse (native)
    at fromJson (file://build/vendor/angular/angular.js:1065:14)
    at defaultHttpResponseTransform (file://build/vendor/angular/angular.js:8579:16)
    at file://build/vendor/angular/angular.js:8664:12
    at forEach (file://build/vendor/angular/angular.js:323:20)
    at transformData (file://build/vendor/angular/angular.js:8663:3)
    at transformResponse (file://build/vendor/angular/angular.js:9389:23)
    at processQueue (file://build/vendor/angular/angular.js:13189:27)
    at file://build/vendor/angular/angular.js:13205:27
    at Scope.$get.Scope.$eval (file://build/vendor/angular/angular.js:14401:28)

我找不到任何有关如何处理角度流的信息.你能帮我吗?

头:

响应太大而无法在此处显示,因此这是它的第一部分:

预习:

解决方法

所以这不是有效的JSON,它是一系列换行符(可能是)JSON消息.这就是“意外令牌”{‘“的含义. Angular的内置解析器不支持开箱即用.问题不在于流媒体与缓冲数据,它只是一种不直接支持的体格式angularjs.您需要确保绕过angular的内置解析器,然后您可以在换行符上拆分字符串并尝试/ catch解析每一行作为JSON对象.

据我所知,流入浏览器的最佳模块是oboe.js.您可以使用RonB/angular-oboe加上一些代码来缓冲每一行,然后将ndjson语法解析为JS对象流.

angularjs express nodejs的关系

angularjs express nodejs的关系

  1. nodejs和express的关系

    express是nodejs的框架,使nodejs更易使用。和ruby和rails的关系一样

  2. angular 如何在express中使用

    angular 是一个javascript库,和express没啥关系。只要放在http服务器中即可使用。可以使用apache服务器,也可以使用express提供的http服务器,设置static文件夹,并放入static文件夹即可。

  3. 用express 4.x生成的项目如何运行?

    DEBUG=angularexpress ./bin/www node ./bin/www nodejs app.js

    app.js需要增加如下语句才能运行

  4. http.listen(3000, function(){
      console.log(''listening on *:3000'');
    });

    5. express的路由顺序(修改了)

app.use(express.static(path.join(__dirname, ''public'')));


//app.use(''/'', routes);

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


app.get(''/'', function (req, res) {

    res.sendfile(''index.html'');

});

修改这个路由 /  没有起作用

        优先使用static文件夹中的index.html,再往下查找路由。


6. angularjs不能生效的原因排查:

a. angularjs不能从google下载,下载下来放在本地可以解决此问题

b. angular.module(''todo'', [])和<html ng-app="todoApp ">不一致


angularjs – Angular CLI:无法读取null的属性’config’

angularjs – Angular CLI:无法读取null的属性’config’

最近我的应用程序从Angular 2.3.0升级到Angular 4.0.3.在此过程中还升级了angular-cli.如果项目克隆到新目录,则抛出:

Cannot read property ‘config’ of null TypeError: Cannot read property
‘config’ of null
at Class.run (/Users/hyadav/Documents/projects/web-app/node_modules/@angular/cli/tasks/build.js:16:56)
at Class.run (/Users/hyadav/Documents/projects/web-app/node_modules/@angular/cli/commands/build.js:143:26)
at Class. (/Users/hyadav/Documents/projects/web-app/node_modules/@angular/cli/ember-cli/lib/models/command.js:134:17)
at process._tickCallback (internal/process/next_tick.js:109:7)

的package.json

"scripts": {
    "ng": "ng","start": "ng serve","build": "ng build","test": "ng test","lint": "ng lint","e2e": "ng e2e"
  },"private": true,"dependencies": {
    "@angular/animations": "^4.0.3","@angular/cli": "^1.0.1","@angular/common": "^4.0.3","@angular/compiler": "^4.0.3","@angular/compiler-cli": "^4.0.3","@angular/core": "^4.0.3","@angular/forms": "^4.0.3","@angular/http": "^4.0.3","@angular/material": "^2.0.0-beta.3","@angular/platform-browser": "^4.0.3","@angular/platform-browser-dynamic": "^4.0.3","@angular/platform-server": "^4.0.3","@angular/router": "^4.0.3","core-js": "^2.4.1","hammerjs": "^2.0.8","rxjs": "^5.2.0","typescript": "^2.2.2","zone.js": "^0.8.4"
  },"devDependencies": {
    "@angular/cli": "^1.0.1","@angular/compiler-cli": "^2.4.0","@types/jasmine": "2.5.38","@types/node": "~6.0.60","codelyzer": "~2.0.0","jasmine-core": "~2.5.2","jasmine-spec-reporter": "~3.2.0","karma": "~1.4.1","karma-chrome-launcher": "~2.0.0","karma-cli": "~1.0.1","karma-coverage-istanbul-reporter": "^0.2.0","karma-jasmine": "~1.1.0","karma-jasmine-html-reporter": "^0.2.2","protractor": "~5.1.0","ts-node": "~2.0.0","tslint": "~4.4.2","typescript": "~2.2.2"
 }
这是Angular v5之前的工作解决方案,因为在v6内部,文件的位置更改为angular.json,并且还更改了内容

创建一个名为.angular-cli.json的新文件并插入:

{
  "$schema": "./node_modules/@angular/cli/lib/config/schema.json","project": {
    "name": "PROJECT_NAME"
  },"apps": [
    {
      "root": "src","outDir": "dist","assets": [
        "assets","favicon.ico"
      ],"index": "index.html","main": "main.ts","polyfills": "polyfills.ts","test": "test.ts","tsconfig": "tsconfig.app.json","testTsconfig": "tsconfig.spec.json","prefix": "app","styles": [
        "styles.css"
      ],"scripts": [],"environmentSource": "environments/environment.ts","environments": {
        "dev": "environments/environment.ts","prod": "environments/environment.prod.ts"
      }
    }
  ],"e2e": {
    "protractor": {
      "config": "./protractor.conf.js"
    }
  },"lint": [
    {
      "project": "src/tsconfig.app.json"
    },{
      "project": "src/tsconfig.spec.json"
    },{
      "project": "e2e/tsconfig.e2e.json"
    }
  ],"test": {
    "karma": {
      "config": "./karma.conf.js"
    }
  },"defaults": {
    "styleExt": "css","component": {}
  }
}

如果从angular-cli创建新项目,您还可以找到此json的副本.

angularjs – Dockerize你的Angular NodeJS应用程序

angularjs – Dockerize你的Angular NodeJS应用程序

我们有一个前端应用程序.
它是用Angular(html css javascript)编写的,需要由webserver(Nginx)托管.
Angular正在与将与后端通信的NodeJs服务器进行通信.

现在我们必须在Docker中运行它.

>我们想要使用2个Docker容器:一个使用nodejs,另一个使用Nginx,让它们一起工作

那么可以在一个存储库中编写2个dockerfiles吗?
主要的想法是为nodejs提供1个dockerfile,它还运行bower install,npm install,…
这将是这样的:

# Create app directory
RUN mkdir -p /usr/src/www
workdir /usr/src/www

RUN npm install -g bower
RUN npm install -g gulp

# Install app dependencies
copY . /usr/src/www/
RUN bower install
RUN npm install
RUN gulp build

EXPOSE port
CMD [ "node", "server.js" ]

还有一个dockerfile,我们在其中运行一个Nginx-webserver,但也包含一个Nginx.conf,所以它可以指向我们node.js-container中的right / dist文件夹
Nginx的dockerfile如下所示:

# Set Nginx base image
FROM Nginx

# copy custom configuration file from the current directory
copY Nginx.conf /etc/Nginx/Nginx.conf

Nginx.conf的一个例子

location ~* /dist {
            proxy_pass http://nodejs:port;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection 'upgrade';
            proxy_set_header Host $host;
            proxy_cache_bypass $http_upgrade;

解决方法:

在我看来,使用2个泊坞容器是最佳选择,每个容器设计的单一责任值得遵循.

每个项目必须创建多个容器是非常常见的:

>数据库
>后端服务器
>前端服务器

一种方法是为docker定义和每个docker上下文创建一个文件夹,创建一个脚本docker_build.sh,用于准备docker上下文(复制所需的所有工件:libs,源代码等),最后构建docker.

project_root/
|----src/
|----docker/
|----|----angular/
|----|----|-----Dockerfile
|----|----|-----docker_build.sh
|----|----nodejs/
|----|----|-----Dockerfile
|----|----|-----docker_build.sh       

docker_build.sh的一个例子

#!/bin/bash

# create temp directory for building
mkdir DockerBuildTempPath/

# copy files to temp directory
cp -arv Dockerfile DockerBuildTempPath/
cp -arv ../../src/ DockerBuildTempPath/
# ... etc

cd DockerBuildTempPath

#build image
docker build -t myapp .

# remove temp directory
cd ..
rm -r ./DockerBuildTempPath/

angularjs – Node.js / Angular.js管理员授权的路由

angularjs – Node.js / Angular.js管理员授权的路由

我正在使用 JSON Web令牌进行身份验证的MEAN应用程序.基本上每个请求,我都在检查用户是否有有效的令牌.如果是这样,他们可以进入路线,否则他们将返回登录页面.

我想让某些路由/ admin / etc …只能由也是admin的登录用户访问.我在mongo中设置了一个isAdmin标志.我是nodejs的新手,想知道检查这个的最佳方法是什么.我是否在路线的角度边做?或者我可以以某种方式创建基于权限的身份验证令牌?作为参考,我遵循MEAN机器书中的代码,特别是在这里 –

https://github.com/scotch-io/mean-machine-code/tree/master/17-user-crm

解决方法

首先,必须在服务器端完成授权决策.如你所建议的那样在Angular.js中在客户端执行它也是一个好主意,但这只是为了改善用户体验,例如没有向用户显示他们无法访问的内容的链接.

使用JWT,您可以在令牌中嵌入有关用户的声明,如下所示:

var jwt = require('jsonwebtoken');
var token = jwt.sign({ role: 'admin' },'your_secret');

要映射表达路由的权限,可以使用connect-roles构建清晰且可读的授权中间件功能.假设您的JWT是在HTTP标头中发送的,并且您拥有以下(天真)授权中间件:

// Naive authentication middleware,just for demonstration
// Assumes you're issuing JWTs somehow and the client is including them in headers
// Like this: Authorization: JWT {token}
app.use(function(req,res,next) {
    var token = req.headers.authorization.replace(/^JWT /,'');
    jwt.verify(token,'your_secret',function(err,decoded) {
        if(err) {
            next(err);
        } else {
            req.user = decoded;
            next();
        }
    });
})

这样,您就可以在路由上强制执行授权策略,如下所示:

var ConnectRoles = require('connect-roles');
var user = new ConnectRoles();

user.use('admin',function(req) {
    return req.user && req.user.role === 'admin';
})

app.get('/admin',user.is('admin'),function(req,next) {
    res.end();
})

请注意,有更好的选择发布&验证JWT,如express-jwt,或使用passport和passort-jwt

我们今天的关于angularjs – 如何以角度读取nodejs流?angular读取本地json的分享就到这里,谢谢您的阅读,如果想了解更多关于angularjs express nodejs的关系、angularjs – Angular CLI:无法读取null的属性’config’、angularjs – Dockerize你的Angular NodeJS应用程序、angularjs – Node.js / Angular.js管理员授权的路由的相关信息,可以在本站进行搜索。

本文标签: