小编Mik*_*ain的帖子

对node.js文件系统感到困惑

我在两个步骤中使用了带有nodejs的write文件:

1.首先判断文件是否存在,使用fs.exists功能;

然后fs.writeFile直接用来写文件;

但是现在我注意到有更多的函数用于写文件,比如fs.open或者fs.close,我应该在写入时使用这些函数来打开还是关闭文件?

此外,我注意到有有fs.createReadStreamfs.createWriteStream功能,什么是它们之间的差异fs.writeFilefs.readFile

file node.js

9
推荐指数
1
解决办法
5150
查看次数

获取当前Windows Phone 7设备的ID

有没有办法可以唯一地识别运行我的应用程序的Windows手机设备?是否有Windows Phone设备ID或什么?

windows-phone-7

8
推荐指数
2
解决办法
7600
查看次数

如何在单元测试中模拟DateTime.Now?

通常的解决方案是将其隐藏在界面后面.

public class RecordService
{
    private readonly ISystemTime systemTime;

    public RecordService(ISystemTime systemTime)
    {
        this.systemTime = systemTime;
    }

    public void RouteRecord(Record record)
    {
        if (record.Created < 
            systemTime.CurrentTime().AddMonths(-2))
        {
            // process old record
        }

        // process the record
    }
}
Run Code Online (Sandbox Code Playgroud)

在单元测试中,您可以使用模拟对象并决定返回什么

[TestClass]
public class When_old_record_is_processed
{
    [TestMethod]
    public void Then_it_is_moved_into_old_records_folder()
    {
        var systemTime = A.Fake<ISystemTime>();
        A.CallTo( () => system.Time.CurrentTime())
          .Returns(DateTime.Now.AddYears(-1));

        var record = new Record(DateTime.Now);
        var service = new RecordService(systemTime);

        service.RouteRecord(record);

        // Asserts...
    }
}
Run Code Online (Sandbox Code Playgroud)

我不想在我的课程中注入另一个界面来获取当前时间.对于如此小的问题,感觉太重了.解决方案是使用具有公共功能的静态类.

public static class SystemTime
{
    public …
Run Code Online (Sandbox Code Playgroud)

c# unit-testing mocking

8
推荐指数
1
解决办法
1万
查看次数

角度2:阻止用户在模态对话框外单击

我想阻止用户在模态对话框外单击,他只能按下按钮退出对话框.我怎样才能做到这一点?

dialog.component.ts

ngOnInit() {

const dialogRef = this.dialog.open(DialogResultComponent);
dialogRef.afterClosed().subscribe(result => {
  console.log(result);
});
Run Code Online (Sandbox Code Playgroud)

}

对话框的result.component.ts

    import { Component, OnInit } from '@angular/core';
import { MdDialog, MdDialogRef } from '@angular/material';
import { FormGroup,FormControl,Validators,FormBuilder,  } from '@angular/forms';



@Component({
  selector: 'app-dialog-result',
  templateUrl: './dialog-result.component.html',
})

export class DialogResultComponent {


  form: FormGroup;
  name = new FormControl('',Validators.required);
  width = new FormControl('',Validators.required);
  height = new FormControl('',Validators.required);
  constructor(public dialogRef: MdDialogRef<DialogResultComponent>,private fb: FormBuilder) {

  }

  ngOnInit() {
  this.form = this.fb.group({
      'name' :this.name,
      'width':   this.width,
      'height':  this.height,
    });
}

  saveData(){ …
Run Code Online (Sandbox Code Playgroud)

css modal-dialog angular-material2 angular

8
推荐指数
2
解决办法
9942
查看次数

跨多个表的SQL Server全文查询 - 为什么这么慢?

我正在尝试了解我正在构建的SQL Server 2008全文查询的性能.

以下查询使用全文索引立即返回正确的结果:

SELECT
    O.ID, O.Name
FROM
    dbo.EventOccurrence O
WHERE
    FREETEXT(O.Name, 'query')
Run Code Online (Sandbox Code Playgroud)

即所有在其名称中带有"查询"字样的EventOccurrences.以下查询使用来自不同表的全文索引也会立即返回:

SELECT
    V.ID, V.Name
FROM
    dbo.Venue V
WHERE
    FREETEXT(V.Name, 'query')
Run Code Online (Sandbox Code Playgroud)

即.所有场地的名字中都有"查询"字样.但是,如果我尝试连接表并同时执行两个全文查询,则返回12秒:

SELECT
    O.ID, O.Name
FROM
    dbo.EventOccurrence O
    INNER JOIN dbo.Event E ON O.EventID = E.ID
    INNER JOIN dbo.Venue V ON E.VenueID = V.ID
WHERE
    FREETEXT(E.Name, 'search')
    OR FREETEXT(V.Name, 'search')
Run Code Online (Sandbox Code Playgroud)

这是执行计划:http://uploadpad.com/files/query.PNG

更新:以文本形式的计划:

  |--Nested Loops(Left Semi Join, OUTER REFERENCES:([E].[ID], [V].[ID]))
       |--Hash Match(Inner Join, HASH:([E].[ID])=([O].[EventID]))
       |    |--Hash Match(Inner Join, HASH:([V].[ID])=([E].[VenueID]))
       |    |    |--Clustered Index Scan(OBJECT:([iScene].[dbo].[Venue].[PK_Venue] AS [V])) …
Run Code Online (Sandbox Code Playgroud)

sql-server full-text-search

7
推荐指数
1
解决办法
2900
查看次数

通过PowerShell签出TFS文件

我想使用PowerShell自动将已编辑的.csproj文件签出和签入到TFS.我只需要将单个文件更改为待处理并检查它们.

有谁知道如何做到这一点?

powershell tfs

7
推荐指数
2
解决办法
8124
查看次数

在配置文件中应用[WebInvoke(ResponseFormat = WebMessageFormat.Json)]

我正在编写我所指的POJ(Plain Old JSON)WCF Web服务 - 一个接收和发出标准JSON而没有ASP.NET Ajax喜欢添加到它的垃圾的服务.

似乎有三个步骤来实现这一目标:

  1. 在端点的标记中将"enableWebScript"更改为"webHttp"
  2. 使用[WebInvoke(ResponseFormat = WebMessageFormat.Json)]装饰方法
  3. 在服务合同中添加[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]的咒语

这对我来说都很好 - 我可以传入并且返回了很好的JSON.

如果我删除了WebInvoke属性,那么我会返回XML,因此它肯定正在做它应该做的事情.但令我感到奇怪的是,指定JSON输出的选项出现在这里,而不是在配置文件中.假设我想将我的方法公开为XML端点 - 我该怎么做?目前我能看到的唯一方法是使用第二种方法完成相同的操作,但没有指定WebMethodFormat.Json.然后冲洗并重复我服务中的每种方法?呸.

指定输出应该在属性中被序列化为JSON似乎完全违背了WCF的原理,其中实现的服务是一种传输和编码不可知的方式,留下了如何将数据移动到周围的令人讨厌的细节.配置文件.

有没有更好的方式做我想做的事情?或者我们是否坚持这个尴尬的属性?或者我不够深入了解WCF?

wcf json

6
推荐指数
1
解决办法
3541
查看次数

使用ObjectContext和DbContext

场景:尝试从一个数据库中提取和重新排列信息.DB A有一些我想要的数据.我想将它以稍微不同的结构存储在DB B上.

DB AI使用EDMX数据库生成的模型,因此它使用ObjectContext的衍生物.DB BI希望生成代码.所以我通过包管理器安装EntityFramework 4.1来使用代码/模型第一种方法.所以DB B使用DbContext派生

当我尝试将信息从DB A存储到DB B时,它说:

测试方法RoutIT.Irma.Import.Service.Test.ImportIrma2ProductTests.ImportProducts抛出异常:System.ArgumentException:找不到"DB A的EDMX模型中的某个实体"的概念模型类型

它实际上是在将DB B实体添加到DB B的Derived DbContext的DbSet属性时执行的.所以代码就像

using (TransactionScope scope = new TransactionScope(TransactionScopeOption.Required))
{
            foreach (FirstPVC pvc in pvcs)
            {
                this._irmaImport.FirstPVCs.Add(pvc); <--
                this._irmaImport.SaveChanges();
            }
            scope.Complete();
        }
 }
Run Code Online (Sandbox Code Playgroud)

它发生在上面箭头标记的代码中的点("< - ")

FirstPVC是一个DB B属性,但在箭头点它抱怨没有属于DB B上下文的实体的概念模型.

这很奇怪,因为我尝试将DB B实体存储到DB B上下文.为什么要关心DB A的实体呢?

所有上下文都包含在同一个项目中.但是DB B的Derived DbContext只知道它自己的DbSet <>属性,突然在尝试向DbSet <>属性添加内容时,它会给我上面的粗体错误.

谁知道为什么会这样?为什么DbContext要关心另一个上下文的实体,特别是ObjectContext派生类之一.

Perhapse有用的是注意到它抱怨的实体看起来有点像这样

[EdmEntityTypeAttribute(NamespaceName="Irma2Model", Name="AccessProvider")]
[Serializable()]
[DataContractAttribute(IsReference=true)]
public partial class AccessProvider : EntityObject
{
    /*****...... ******/
}
Run Code Online (Sandbox Code Playgroud)

.net c# entity-framework objectcontext dbcontext

6
推荐指数
1
解决办法
3903
查看次数

是否有一种简单的方法来订阅EasyNetQ中的默认错误队列?

在我的测试应用程序中,我可以看到处理过的异常消息被自动插入到默认的EasyNetQ_Default_Error_Queue中,这很棒.然后,我可以使用Hosepipe成功地转储或重新排队这些消息,这也很好,但需要下降到命令行并调用Hosepipe和RabbitMQ API来清除重试消息的队列.

所以我认为我的应用程序最简单的方法就是简单地订阅错误队列,这样我就可以使用相同的基础架构重新处理它们.但在EastNetQ中,错误队列似乎很特殊.我们需要使用正确的类型和路由ID进行订阅,因此我不确定错误队列的这些值应该是什么:

bus.Subscribe<WhatShouldThisBe>("and-this", ReprocessErrorMessage);

我可以使用简单的API订阅错误队列,还是需要深入了解高级API

如果我的原始消息的类型是TestMessage,那么我希望能够做这样的事情:

bus.Subscribe<ErrorMessage<TestMessage>>("???", ReprocessErrorMessage);

哪个ErrorMessage是EasyNetQ提供的类来包装所有错误.这可能吗?

rabbitmq easynetq

6
推荐指数
1
解决办法
3238
查看次数

Angular 2 路由器不解析子辅助路由

我正在尝试为模态窗口使用辅助路由。无论我尝试什么,我都无法解决。我只是收到路由错误。这是我的方法...

应用程序组件.html

<router-outlet></router-outlet>
<router-outlet name="modal"></router-outlet>
Run Code Online (Sandbox Code Playgroud)

admin-routing.module.ts

...
const ROUTES: Routes = [
  {
    path: 'admin',
    component: AdminComponent,
    children: [
      {
        path: 'accounts',
        loadChildren: './accounts/accounts.module#AccountsModule'
      },{...}
    ]
  }
];
...
Run Code Online (Sandbox Code Playgroud)

账户-routing.module.ts

...
const ROUTES: Routes = [
  {
    path: '',
    children: [
      {
        path: '',
        component: AccountsIndexComponent
      },{
        path: 'new',
        component: AccountsNewComponent
      },{
        path: ':id',
        component: AccountsShowComponent
      },{
        path: ':id/edit',
        component: AccountsEditComponent,
        outlet: 'modal'
      }
    ]
  }
];
...
Run Code Online (Sandbox Code Playgroud)

modal.service.ts

  ...
  constructor(
    private router:Router,
    private route:ActivatedRoute
  ) { }
  open(route:Array<any>) { …
Run Code Online (Sandbox Code Playgroud)

router modal-dialog typescript angular

6
推荐指数
1
解决办法
1908
查看次数